ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

Rubyってそんなことできるんだ


まさか…と思いやってみた↓

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!


_人人人人人_
> うごく <
 ̄^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ト /^、_ノ  | 、.__ つ  (.__    ̄ ̄ ̄ ̄   ・ ・

なんと予約語もメソッド名にできると言語仕様で決まってました。だったらできて当然じゃんただしややこしいのでやめておいたほうがいいかもしれませんね。