我正在尝试学习Ruby语言中的实例变量。 如果这是一个愚蠢的问题,请原谅。
class Instance
def method1
@hello = "hello"
p hello
end
Instance.new.method1()
end
当我尝试运行上述程序时,它会给我以下错误
C:\ Documents and Settings \ Sai \ Desktop \ RubySamples> ruby Instance.rb
Instance.rb:4:inmethod1': undefined local variable or method
hello'for#<Instance:0xf09fa8 @hello="hello">
(NameError)来自Instance.rb:6:
<class:Instance>'
'
from Instance.rb:1:in
上述相同的程序对局部变量工作正常,如果我从hello中删除@符号。
答案 0 :(得分:4)
毫无疑问是愚蠢的。您正在为实例变量赋值,但是您正在调用下面的局部变量(或方法)。
@hello
是一个实例变量,它在一个实例的范围内可用,它与hello
不同,后者是一个局部变量。
答案 1 :(得分:0)
以下是两种有效的解决方案:
首先,使用Accessors作为实例变量(第二行):
class Instance
attr_accessor :hello
def method1
@hello = "hello"
p hello
end
Instance.new.method1()
end
其次,直接使用实例变量:
class Instance
def method1
@hello = "hello"
p @hello
end
Instance.new.method1()
end
另外一个想法:我会在类定义之外调用该方法:
class Instance
def method1
@hello = "hello"
p @hello
end
end
Instance.new.method1()