「Rubyがミニツク」の演習問題を解く vol8

各Planetクラスのインスタンスにlifeメソッドを定義する演習

さっそくやっていきます。

問題

以下のコードがコメント部分の通りの出力となるように、
(A)の部分に当てはまる適切なコードを書いてください。

 1. class Planet
 2.   def life?
 3.     puts "Who knows?"
 4.   end
 5. end
 6.  
 7. pluto = Planet.new()
 8. earth = Planet.new()
 9. mars = Planet.new()
10.  
11. (A)
12.  
13. pluto.life?()  #=> Probably not.
14. earth.life?()  #=> Positively!
15. mars.life?()   #=> Who knows?
私の回答・解説

今回は、問題を見てもさっぱり分からなかったんですが、
ネットで調べたらすぐに分かりました。
特異メソッドという書き方で解くことができます。
newで生成したオブジェクトに対して
def …と書くとそのオブジェクトに対してのみ有効な
メソッドを定義できるようです。

模範解答はこちら

1. def earth.life?()
2.   puts "Positively!"
3. end
4.  
5. def pluto.life?()
6.   puts "Probably not."
7. end

今回は特に言うことないんですが、
特異メソッドはどういう時に使うんでしょうか。

  • あるオブジェクトだけ別の振る舞いをさせたい
  • その振る舞いを何度もさせる必要がある

とかでしょうか?
時間がある時に調べておきます。

次回は「buy_ticketsメソッドを定義する演習」をやります。