Я пытаюсь создать прокси-объект, который передает почти все вызовы методов дочернему объекту, по сути, шаблону делегатора.По большей части я просто использую BasicObject и передаю каждый вызов method_missing дочернему объекту.Пока все хорошо.
Хитрость в том, что, как ни старайся, я не могу обмануть оператор case Руби, поэтому я не могу сделать:
x = Proxy.new(15)
Fixnum === x #=> false, no matter what I do
Это, конечно, делаетлюбые операции case x
не выполняются, что означает, что прокси нельзя безопасно передавать другим библиотекам.
Я не могу понять, что использует ===.Прокси отлично работает для всех интроспекций, основанных на классах, о которых я знаю, и которые все правильно передаются дочернему объекту:
x.is_a?(Fixnum) #=> true
x.instance_of?(Fixnum) #=> true
x.kind_of?(Fixnum) #=> true
x.class #=> Fixnum
Module#===
просто совершает какое-то волшебство, которое невозможноизбегать?