2016-10-29 3 views
-2

私はまだRubyには新しく、課題の1つに問題があります。インスタンスメソッドやインスタンス変数を理解していないRUBY

Geniesは小さなランプに住んでいます。ジーンズがランプにあるかどうかを示すデータでクラスを更新します。 genieを適切に更新するenter_lampおよびexit_lampインスタンスメソッドを含めます。ジニーがランプを出るたびに、「あなたの希望を考慮するためにここにいる!ジニーがランプに戻ると、「さようなら」が印刷されます。最初に作成されるとき、ジニーはランプの中で始めるべきです。

作業をテストするためにドライバコードを更新してください。

class Genie 
    attr_accessor :name 
    attr_reader :age 


    def initialize(name, age) 
     @name = name 
     @age = age 
     @enter_lamp = enter_lamp 
     @exit_lamp = exit_lamp 
    end 

    def exit_lamp 
     puts "#{name} is here to consider your wish!" 
    end 

    def enter_lamp 
     puts "Goodbye for now." 
    end 

end 


anything = Genie.new("Leonardo", 85) 
anything.name = "Michael" 
+1

具体的な質問は何ですか? – sschmeck

+0

私の質問は、exit_lampとenter_lampインスタンスメソッドを追加する方法です。両方のインスタンスを実行するドライバコードを持っています。私は混乱を招くエラーを続けています –

+0

インスタンスメソッドはすでに存在しており、インスタンス変数を追加する必要があります。インスタンス変数はランプの内部または外部に保存されます。どちらの方法も状態をトグルします。何か案は? – sschmeck

答えて

2

インスタンスメソッドおよび変数は、クラスのインスタンスによって制御され、インスタンス間で共有されません。クラスのメソッドと変数は、クラスによって制御され、すべてのインスタンスに影響します。

たとえば、 'Human'オブジェクトのインスタンス変数には、インスタンス変数として年齢、名前、髪の色、または目の色が含まれている場合があります。それは私たち全員が持っているものであり、私たちはすべてユニークな価値を持っています(少なくとも、常に同じ価値を持っているとは限りません)。

ボブは20の黒い髪、サリーは90、灰色の髪です。

ボブの髪の色を変更した場合、サリーの髪は変更されません。

これは、すべてのインスタンスで正確に共有されるクラス変数とは対照的です。

だから、ボブとサリーの両者は、彼らの目のためのクラス変数を持っています。彼らと他のすべての人間は2つ持っているからです。

これを3眼に変更したい場合は、人間のDNA(Humanクラス)を変更しなければならず、すべての人間は3つの目を持つことになります。

+0

私は何をしたいのですか?私は私のドライバコードanything.enter_lampを入力すると、私はそれが "さようなら"のために出力したいと思っています。同じenter_lamp –

+0

あなたが投稿したコードはすでにこの動作を達成しています。 – Bricky

+0

ドライバコードが間違っているかもしれませんか?私は/ nエラーを取得し続ける –

関連する問題