我有代码:
class Blah
@hello = ["a", "b", "c"]
puts @hello[0]
def something()
puts "abc"
#puts @hello[0]
end
end
z = Blah.new()
z.something()
puts @hello[0]
其结果为:
a
abc
如果我取消评论
#puts @hello[0]
并尝试输出数组@hello
的第一个结果,即a
,出现此错误:
array_2.rb:13:in `something': undefined method `[]' for nil:NilClass (NoMethodError)
为什么我不能得到结果:
a
abc
a
为什么我的代码不起作用?诸如@example
之类的数组不仅应在类中访问,而且应在something
方法中访问。为什么我不能在方法内访问@hello[0]
?为什么@hello[0]
仅可在类中访问,而不能在方法中访问?需要有人修复我的代码,以便我可以在方法中访问@array
。
答案 0 :(得分:1)
您需要在实例方法中初始化实例变量,但是您是在类主体的范围内执行此操作的,
如果您通过@hello
方法设置了initialize
,它应该会按预期运行。
class Blah
def initialize
@hello = ["a","b","c"]
end
def something()
puts @hello[0]
end
end
Blah.new.something #=> 'a'
这种方式可以使您在实例化类时传递参数,并且每个实例的实例变量中可能存储有不同的数据。