特異メソッドの定義方法(おまけで特異メソッドの定義方法)
http://d.hatena.ne.jp/toshi_hirasawa/20080808/1360124848
の部分と関係しております
こちら様からのコピペでございます(ありがとうございます)
http://cyakarin.kuronowish.com/index.cgi?cla_ano
このように特異クラスを開くことで、 その中に記述されるメソッドは全て特異メソッドとして定義されます。 特定のオブジェクトに対して、複数の特異メソッドを定義したい場合に特異クラスを用いるとよいでしょう。 ちなみに、全てのクラスは「Class クラス」のオブジェクトであるため、 クラスメソッドはそのクラスにのみ定義される特異メソッドと言えます。 なのでクラスメソッドも特異クラスのように記述することが可能です。 しかし習慣的にクラスメソッドは一つずつ定義される傾向にあるように思えます。
こちらが、まとめのお言葉でございます。ありがとうございます orz
[hirasawa@centos-hira ~]$ cat tokuiClass.rb #!/usr/local/bin/ruby -Ku class Coffee def initialize(hotness, size) @taste = "Black" @hotness = hotness @size = size end attr_reader :taste, :hotness, :size end general_coffee = Coffee.new("Hot", "Grande") custom_coffee = Coffee.new("Hot", "Tall") class << custom_coffee def special_topping @special_topping = "Honey" end end puts custom_coffee.special_topping #puts general_coffee.special_topping #error! # ./tokuiClass.rb:21:in `<main>': undefined method `special_topping' # for #<Coffee:0xa045b00> (NoMethodError) [hirasawa@centos-hira ~]$ ./tokuiClass.rb Honey [hirasawa@centos-hira ~]$
特異メソッドを複数以上定義したい場合には、特異クラスのほうが有利
ってことですな なるほど
[hirasawa@centos-hira ~]$ cat tokuiClass2.rb #!/usr/local/bin/ruby -Ku class Coffee def initialize(hotness, size) @taste = "Black" @hotness = hotness @size = size end attr_reader :taste, :hotness, :size end general_coffee = Coffee.new("Hot", "Grande") custom_coffee = Coffee.new("Hot", "Tall") class << custom_coffee def honey_topping @honey_topping = "Honey" end def milk_topping @milk_topping = "Milk" end end puts custom_coffee.honey_topping puts custom_coffee.milk_topping [hirasawa@centos-hira ~]$ ./tokuiMethod2.rb Honey Milk [hirasawa@centos-hira ~]$
以下は特異メソッド定義への書き直しバージョン
(1つだけメソッドを定義したい場合などにより有効)
[hirasawa@centos-hira ~]$ cat tokuiMethod.rb #!/usr/local/bin/ruby -Ku class Coffee def initialize(hotness, size) @taste = "Black" @hotness = hotness @size = size end attr_reader :taste, :hotness, :size end general_coffee = Coffee.new("Hot", "Grande") custom_coffee = Coffee.new("Hot", "Tall") #class << custom_coffee # def special_topping # @special_topping = Honey # end #end def custom_coffee.special_topping @special_topping = "Honey" end puts custom_coffee.special_topping [hirasawa@centos-hira ~]$ ./tokuiMethod.rb Honey [hirasawa@centos-hira ~]$