[Ruby] オーバーライドとか無視してKernel#classを直接呼びたい
直接 `self.class` を呼ぶと、#class がオーバーライドされている可能性があるので任意のオブジェクトに対して呼ぶことはできません。よってKernel#classを直接呼ぶ必要があります。そこで、以下のように#classのUnboudMethodを得て、それにレシーバを与えて呼び出すことで解決できます。
def self.class raise "boom!" end get_class = Kernel.instance_method(:class) # and later p get_class.bind(self).call
とはいえパフォーマンスがあまりよくないのでもっといい方法があればそっちを使いたい。
あと Kernel#class
の上書きはやめてくださいお願いしますm(_ _)m。
[追記]
別解もあるようです。
このままだと汎用的には使えないのでFixnumを避けるなどの工夫は必要ですが、こちらでもいいですね。