0

我发现了一个有趣的问题: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

我认为当我调用 ruby​​ 时不会引发任何方法错误,Foo.new但它通过时没有任何问题。我尝试时代码将失败Foo.new.bar

这怎么可能以及如何访问Foo.new.foo变量?

4

1 回答 1

4

你有一个错字并且拼写错误initializeitnialize所以它不会被调用 - 所以没有错误。

看起来您正在尝试创建一个实例变量 - 为此,您需要在某处使用@前缀定义它。所以你可能会这样做:

def initialize(name)
  @foo = name
end

这意味着您可以@foo在课堂内访问。

self.foo只能引用一个方法 foo,因此如果要调用它,则需要定义该方法,无论是显式地还是使用其中一个attr变体。

但是,在这种情况下,您可以这样做

def set_bar
  @bar = 'it will succeed!'
end
于 2012-04-10T15:02:16.923 回答