ryudai.rb第1回が終わりました。(パチパチ
今回は最初ということで、右も左もわからない状態で始めたのですが割りと面白かった
です。今回は自分が担当?ということで「ストリームスのAIを作ろう」と題して発表し
てみたのですが、色々横道にそれました。
Instance_eval
気づいたら最初はinstance_evalのお話をしていた
class Siman def initialize(name) @name = name end private def hello puts "hello #{@name}" end end siman = Siman.new("Siman") siman.instance_eval{ hello } siman.instance_eval { def say puts "Siman say 'Hello Ryudai.rb'" end def my puts "My class is #{self.class}" end } siman.say siman.my
このソースの何がヒドイってprivateのメッソドに普通にアクセスできてしまってる
こと、同時に新しい関数を定義できてしまうことである。オブジェクト指向とは何
だったのか。
instance_evalは渡されたブロック文をレシーバのインスタンス(ここではsiman)の
元で実行されます。後者の使い方はたぶんあまりしないような気がしますが。。。
続く