疑問:特異クラスの構文の不思議 - rubyco(るびこ)の日記

屁理屈をこねてみる.後で「それはE言語とかS言語とかの伝統で〜」とか言われそうな悪寒.

Ruby

class << obj
  ...
end

という特異クラスの構文はなんなのか,という話.

まず,classという構文は通常クラス間の関係を定義するものであるから,ここでも「『objのクラス』となにか」の関係を定義しているものであると仮定する.つまりここの「obj」は「objのクラス」という意味であると仮定する.また,特異クラスをid:hyukiさんにならって「ε」と書くことにする.

このとき,εはobjのクラスのサブクラスであるから,

class ε < obj
  ...
end

と書くことができる.

しかし,一方で,objのクラスとεは一致するのだから,

class obj < ε
  ...
end

も合法であると考えられる.

全体としては,

class ε < obj < ε
  ...
end

となるわけで,εを省略して

class < obj <
  ...
end

ここまでくれば,あとは不等号を前置演算子にすれば,

class << obj
  ...
end

になりそうな気が……






あんまりしませんけど.