Es gibt verschiedene Arten von Variablen, und ich wusste nicht, wie ich sie richtig verwenden soll. Deshalb hinterlasse ich mir eine Notiz.
local.rb
def local()
a = 3
end
p a
# =>Traceback (most recent call last):
local.rb:5:in `<main>': undefined local variable or method `a' for main:Object (NameError)
Eine von der lokalen Methode definierte Methode kann nicht von außerhalb der Methode aufgerufen werden.
instance.rb
class Instance
def set_val(val)
@val = val
end
def put_val
p @val
end
end
test1 = Instance.new
test1.set_val("aaa")
test1.put_val
test2 = Instance.new
test2.put_val
# =>
"aaa"
nil
Fügen Sie "aaa" mit der Methode set_val in @val der Instanz test1 ein. Danach wird in Beispiel test2 put_val aufgerufen, aber nil wird zurückgegeben. Daraus ist ersichtlich, dass der Wert für jede Instanz gehalten wird.
instance.rb
class Instance
def set_val(val)
@val = val
end
def put_val
p @val
end
end
test1 = Instance.new
test1.set_val("aaa")
test1.put_val
test2 = Instance.new
test2.set_val("bbb")
test2.put_val
# =>
"aaa"
"bbb"
Die set_val-Methode muss auch für die Instanz test2 verwendet werden.
class.rb
class Instance
def set_val(val)
@@val = val
end
def put_val
p @@val
end
end
test1 = Instance.new
test1.set_val("aaa")
test1.put_val
test2 = Instance.new
test2.put_val
# =>
"aaa"
"aaa"
Im Gegensatz zur vorherigen Instanzvariablen wird der Wert von allen Instanzen derselben Klasse gemeinsam genutzt.
class.rb
class Instance
def set_val(val)
@@val = val
end
def put_val
p @@val
end
end
test1 = Instance.new
test1.set_val("aaa")
test1.put_val
test2 = Instance.new
test2.set_val("bbb")
test2.put_val
test1.put_val
# =>
"aaa"
"bbb"
"bbb"
global.rb
class Global
def set_val(val)
$val = val
end
end
test1 = Global.new
test1.set_val("aaa")
p $val
# =>
"aaa"
Recommended Posts