2012-04-10 9 views
0

私がFoo.newに電話するとメソッドのエラーが発生しますが、問題なく通過します。試してみるとコードが失敗しますFoo.new.barRubyは初期化と自己

どのようにしてFoo.new.foo変数にアクセスできますか?

答えて

4

あなたはタイプミスがあります。initializeitnializeと綴りが間違っていますので、エラーは発生しません。

インスタンス変数を作成しようとしているようです。つまり、どこかで、接頭辞@で定義する必要があります。だから、行う可能性があります:あなたを意味するだろう

def initialize(name) 
    @foo = name 
end 

がクラス内@fooにアクセスすることができます。

self.fooは今まで方法fooを参照することができますので、あなたは、あなたがそれを呼び出すようにしたい場合は、明示的またはattr変種のいずれかを使用して、そのメソッドを定義する必要があります。

ただし、この場合には、あなただけの

def set_bar 
    @bar = 'it will succeed!' 
end 
+0

が、それがこのパズルそのhttp://rubeque.com/problems/fixing-bad-code-the-wrong-way/悪いようですマイ行うことができますソリューションは意味をなさない... – luacassus

+0

ちょうどパズルを見ていたが、それがどのように関連しているか見ることができない!パズルは意味をなさない - タイトルは "間違った方法で悪いコードを修正する" *非常に、非常に適しています*。 – Russell

+1

私はパズルに焦点を当てるのは、 'method_missing'の定義だと思います。あなたはこのメソッド以外のコードを変更する必要はありません。 – Russell

関連する問題