2 Stimmen

Wie rufe ich eine Methode auf, die ein Hash-Wert ist?

Zuvor hatte ich nach einer cleveren Möglichkeit gefragt, eine Methode unter einer bestimmten Bedingung auszuführen " Ruby - ein cleverer Weg, um eine Funktion unter einer Bedingung auszuführen ."

Die Lösungen und die Reaktionszeit war großartig, obwohl, nach der Implementierung, mit einem Hash von Lambdas wird ziemlich schnell hässlich. Also begann ich zu experimentieren.

Der folgende Code funktioniert:

def a()
  puts "hello world"
end

some_hash = { 0 => a() }

some_hash[0]

Aber wenn ich dies in eine Klasse verpacke, funktioniert es nicht mehr:

class A

  @a = { 0 => a()}

  def a()
    puts "hello world"
  end

  def b()
    @a[0]
  end

end

d = A.new()

d.b()

Ich sehe nicht, warum es nicht mehr funktionieren sollte. Kann jemand einen Vorschlag machen, wie man es wieder zum Laufen bringt?

1voto

Saurabh Hirani Punkte 1100

Ich bin ziemlich neu in der Verwendung von Callbacks in Ruby und dies ist, wie ich es mir erklärt, anhand eines Beispiels:

require 'logger'
log = Logger.new('/var/tmp/log.out')

def callit(severity, msg, myproc)
  myproc.call(sev, msg)
end

lookup_severity = {}
lookup_severity['info'] = Proc.new { |x| log.info(x) }
lookup_severity['debug'] = Proc.new { |x| log.debug(x) }

logit = Proc.new { |x,y| lookup_sev[x].call(y) }

callit('info', "check4", logit)
callit('debug', "check5", logit)

0voto

Arrow Punkte 221

a = ->(string="Kein String übergeben") do

legt Zeichenkette

Ende

some_hash = { 0 => a }

some_hash[0].call("Hallo Welt")

some_hash[0][]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X