Object#methodsは何でもかんでも検出してくれるわけじゃない

スクリプト。

class Hoge
  def initialize
    @foo = "ruby"
  end

  def method_missing
    return self.instance_variable_get("@#{name.to_s}")
  end
end

hoge = Hoge.new
p hoge.foo
p hoge.methods.include?("foo")

実行結果。

"ruby"
false

まあ当たり前だが、その当たり前でバグ出してましたorz