【Ruby】パーフェクトRuby 学習感想文 ~第7章
それでは7章を読んでいきます。
(参考・経緯など)
パーフェクトRuby 学習感想文 ~はじめに
P276 実行結果が違うと思う
このコード、最後のrespond_to? メソッドはtrue じゃないかな?
class AttrClass def initialize @attr = "attr" end def add_reader(instance_val_name) eval <<-EOD def #{instance_val_name} @#{instance_val_name} end EOD end def add_writer(instance_val_name) eval <<-EOD def #{instance_val_name}=(val) @#{instance_val_name} = val end EOD end end attr_obj = AttrClass.new p attr_obj.respond_to? "attr" #=> false attr_obj.add_reader "attr" p attr_obj.respond_to? "attr" #=> true p attr_obj.attr p attr_obj.respond_to? "attr" #=> false
手元で確認してみました。やっぱりtrue になりました。
■hoge8.rb
上記のコード
■実行結果
false true "attr" true
P276 例が分かりづらい
この記載コードは、インスタンス変数名とその値が同じなので、
ややこしくて少し理解が難しかったです。
下記のように作成する動的メソッド名を変更すると、理解しやすくなりました。
class AttrClass def initialize @attr = "attr" end def add_reader(instance_val_name) eval <<-EOD def #{instance_val_name} @#{instance_val_name} end EOD end def add_writer(instance_val_name) eval <<-EOD def #{instance_val_name}=(val) @#{instance_val_name} = val end EOD end end attr_obj = AttrClass.new p attr_obj.respond_to? "hoge" ←false attr_obj.add_reader "hoge" p attr_obj.respond_to? "hoge" ←true p attr_obj.hoge ←nil まだ@hogeを定義していないから。 p attr_obj.attr ←エラー。まだattrメソッドを定義していないから。undefined method `attr' for #<AttrClass:0x31d3598 @attr="attr">。
さくさくと完了