undefined method `a?`
Q. foo.a??? が undefined method "a?" になるのは何故でしょうか。 (ruby) (理由意外にしらない人がおおかったので)
— そらは (@sora_h) November 14, 2013
Rubyの ? でぱっと思いつくのは、1番目の ? はメソッド名の一部(つまり a? というメソッド)で、2番目の ? は三項演算子、3番目はリテラルの ? かなーと思ったけど、それがなんで最終的に undefined method になるのかはちょっとわかんなかった。
と、ここまで書いて、ハッとしたんだけど、? がリテラルなら、2番目の ? は三項演算子の ? ではなくてリテラルとしての?じゃなかろうか。つまり foo.a??? は foo.a?"?" と同義であって、結局評価されているのは .a? というメソッド、.a? というメソッドは foo には定義されていないから undefined method で怒られる、という説はどうだろう。
まとめると .a??? (= .a?"?" ) は .a? というメソッドに 文字列 ? を引数として渡しているにしかすぎないんではなかろうかー??だと思う。新たな疑問として ? ってどういう時に使うの。。。