Der folgende CodeWie Umfang von Ruby mainspace Variablen innerhalb seiner Methoden
erhöhen wirdin
e
auszudehnen Object (NameError
)
a = '0'
def e
puts a
end
e
Wie kann a
innerhalb e
zugänglich gemacht werden?
Der folgende CodeWie Umfang von Ruby mainspace Variablen innerhalb seiner Methoden
erhöhen wirdin
e
auszudehnen Object (NameError
)
a = '0'
def e
puts a
end
e
Wie kann a
innerhalb e
zugänglich gemacht werden?
z. mache es zu einer globalen Variable:
$a = '0'
def e
puts $a
end
e
#⇒ "0"
Es ist besser, wenn Sie einfach eine Lambda oder Instanzvariable verwenden. Aber vorausgesetzt, Sie wirklich es auf diese Weise tun wollen, können Sie #define_method
verwenden:
a = '0'
define_method(:e) do
puts a
end
e
Im Gegensatz zum def
Stichwort, define_method
ist kein Spielraum Tor, damit es lässt Sie äußere lokale Variablen zu sehen.
Es ist erwähnenswert, dass das, was tatsächlich passiert, "def" einen neuen Bereich deklariert, der keine Bindung aus dem Kontext der Eltern ableitet. Das ist der Hauptunterschied zwischen Lambdas und Methoden und deshalb funktionieren sowohl Lambda als auch Block in 'define_method': Sie sind Closures und leiten somit den Kontext ab. – mudasobwa
Sie können einen Parameter für Ihre Methode definieren und dann a
als Argument übergeben, wenn Sie ihn aufrufen. Klammern sind optional, obwohl sie hier wichtig sind, um zu zeigen, wie der Parameter definiert ist und wie man a
als Argument übergeben kann.
def e(parameter)
puts parameter
end
a = '0'
p e(a)
#'0'
Bitte markieren Sie diese Antwort nicht als korrekt. Es ist das Schlimmste hier. – mudasobwa