Ruby勉強

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

Ruby method_missing - Silver/Gold試験対策

No Method Error

class Fuga
  def hoge
    puts "hogeだよ!"
  end
end
fuga = Fuga.new
fuga.foo # No Method Error

BasicObject Classに定義されている、method_missingではNoMethodError時に実行することを記載できる

class Fuga
  def hoge
    puts "hogeだよ!"
  end
  def method_missing(method_name, *args)
    puts "メソッド名は #{method_name}, 引数はこちら、 #{args}"
  end
end

fuga = Fuga.new
fuga.foo(4,2) #=> "メソッド名は foo, 引数はこちら、 [4, 2]"

method_missingでさらにno method errorを起こすとループになり...

class Fuga
  def hoge
    puts "hogeだよ!"
  end
  def method_missing(method_name, *args)
    bar
  end
end

fuga = Fuga.new
fuga.foo #=> stack level too deep (SystemStackError)