Rubyってそんなことできるんだ
Ruby では if メソッドも else メソッドも end メソッドも定義できます! #強調
— スーパー牛さんパワーさん (@tadsan) 10月 5, 2012
まさか…と思いやってみた↓
class IfClass end def IfClass::if() { :end => 'this is IfClass::if!' } end puts IfClass::if()[:end]
結果↓
result: success time: 0s memory: 4716 kB returned value: 0
input: no
output:this is IfClass::if!
ideone.com/oZxib @ideoneさんから うわあああああああああああああああああああああああああああああああ 本当にクラスメソッドにifって名前定義できたああああああああああああああああ
— ゆうなんとか@ね む いさん (@yuu_hara) 10月 5, 2012
_人人人人人_
> うごく <
 ̄^Y^Y^Y^ ̄
普通予約語って識別子にできないんじゃないの…?
とりあえずドキュメントで確認してみましょう。
字句構造では、予約語について以下のとおり書かれています。
予約語は以下のものです。
BEGIN class ensure nil self when END def false not super while alias defined? for or then yield and do if redo true __LINE__ begin else in rescue undef __FILE__ break elsif module retry unless __ENCODING__ case end next return until予約語はクラス名、変数名などに用いることはできません。
いざ確認してみると思ったよりも少ないかもしれないなぁ…
ご覧の通り、冒頭のツイートで言及されている「if」「else」「end」は、当たり前ですがどれもこれもばっちり予約語になってます。変数名などに用いることは「できません」と念まで押しています。ですが、このあとこう続いています。
ただし 接頭辞$, @、@@が先頭についたものは予約語 とは見なされません。また、def のあとやメソッド呼び出しの ピリオドのあとなどメソッド名であるとはっきり分かる場所では メソッド名として用いることができます。
ナ ゝ ナ ゝ / 十_" ー;=‐ |! |! cト cト /^、_ノ | 、.__ つ (.__  ̄ ̄ ̄ ̄ ・ ・
なんと予約語もメソッド名にできると言語仕様で決まってました。だったらできて当然じゃんただしややこしいのでやめておいたほうがいいかもしれませんね。