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の1つを使用して呼び出す場合は、そのメソッドを定義する必要があります。attr

ただし、この場合は、

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