simanのブログ

ゆるふわプログラマー。競技プログラミングやってます。Ruby好き

Ryudai.rb第1回まとめ(1)

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)の
元で実行されます。後者の使い方はたぶんあまりしないような気がしますが。。。

続く