2017-07-20 3 views

Antwort

1

z. mache es zu einer globalen Variable:

$a = '0' 
def e 
    puts $a 
end 
e 
#⇒ "0" 
+2

Bitte markieren Sie diese Antwort nicht als korrekt. Es ist das Schlimmste hier. – mudasobwa

2

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.

+1

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

0

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'