質問: s.reverse puts "回文" else puts "ではない" end end ``` rails console で上記のようにメソッド定義を入力すると ``` => :palindrome ``` と帰ってきます(「:」が付いているのでシンボル?)。これに対し、 ``` # 想定内 >> :palindrome => :palindrome # 想定内 >> palindrome "しんぶんし" 回文 => nil # 想定外! >> :palindrome "しんぶんし" SyntaxError: (irb):21: syntax error, unexpected tSTRING_BEG, expecting end-of-input :palindrome "しんぶんし" ``` 最後の「:palindrome "しんぶんし" 」ではエラーになってしまいます。 質問ですが、 * メソッド定義で「=> :palindrome」と帰ってきますがこれは「:palindrome」というシンボルに対してメソッド定義「def ... end」が割り当てられたということを表していますか? * そうであれば、なぜ「:palindrome "しんぶんし"」はエラーになるのでしょうか? * またそうでなければ、なぜメソッド定義で「=> :palindrome」が帰って来るのでしょうか? 「=> palindrome」では無いでしょうか? 理由も含め教えて頂ければ幸いです。 よろしくお願いいたします。
回答: 本当は公式のリファレンスから該当部分を探せれば良かったのですが、見つけられなかったので、実際の挙動から推測される事を回答します。 単純にメソッド定義(def メソッド名~end)の戻り値が、メソッド名と同名のシンボルであるという事ではないでしょうか。 rails consoleは実行した命令の戻り値が表示されます。 メソッド定義は、def ~ endですから、その戻り値が表示される事になります。 その値がシンボルになっているわけです。 つまり、メソッド定義はシンボルではなく、メソッド定義の戻り値がシンボルになっているだけです。 シンボルにメソッドが紐づいているわけでもありません。 これならば、シンボル名でメソッドが実行できない事の説明がつきます。