我发现了一个有趣的问题:http://rubeque.com/problems/fixing-bad-code-the-wrong-way/solutions
通常我们有一个简单的类(注意我们这里没有attr_accessor
):
class Foo
def itnialize(name)
self.foo = name
end
def set_bar
self.bar = 'it will fail..'
end
end
我认为当我调用Foo.new
时,ruby不会引发任何方法错误,但它会毫无问题地通过。当我尝试Foo.new.bar
如何可能以及如何访问Foo.new.foo
变量?
答案 0 :(得分:4)
你有一个拼写错误,拼写错误initialize
为itnialize
所以它不会被调用 - 所以没有错误。
看起来您正在尝试创建一个实例变量 - 为此,您需要在某处使用@
前缀来定义它。所以你可以这样做:
def initialize(name)
@foo = name
end
这意味着您可以在课堂内访问@foo
。
self.foo
只能引用方法 foo
,因此如果要显式或使用其中一个方法调用它,则需要定义该方法attr
变体。
然而,在这种情况下,你可以做到
def set_bar
@bar = 'it will succeed!'
end