Ruby勉強

インターネットの企画職な人がプログラミングを勉強するブログ

Ruby __send__, instance_eval, instance_exec

privateメソッドでも、 sendやinstance_evalならば実行可能

class A
  private
  def a
    @value = "a"
    puts @value
  end
end
obj = A.new
obj.__send__(:a) #=> "a"
# instance_evalはブロックを実行可能
obj.instance_eval{
  puts(@value + "b")
}#=> "ab"

instant_execなら引数をとることが可能

class B
  private
  def initialize
    @x = 3
  end
end
B.new.instance_exec(3){|int| (@x ** 2).times{puts "こんにちは"}} #=> こんにちは こんにちは...