gpt4 book ai didi

ruby - 用代理对象愚弄 Ruby 的 case 运算符 ===

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:37 25 4
gpt4 key购买 nike

我正在尝试制作一个代理对象,它将几乎所有方法调用都转移到一个子对象,本质上是委托(delegate)人模式。在大多数情况下,我只是使用 BasicObject 并将每次使用 method_missing 的调用传递给子对象。到目前为止,还不错。

诀窍是尽我所能,我无法欺骗 Ruby 的 case 运算符,所以我不能这样做:

x = Proxy.new(15)
Fixnum === x #=> false, no matter what I do

这当然会使任何 case x 操作失败,这意味着无法将代理安全地移交给其他库。

我这辈子都搞不懂 === 在用什么。该代理适用于我所知道的所有基于类的内省(introspection),这些内省(introspection)都已正确传递给子对象:

x.is_a?(Fixnum) #=> true
x.instance_of?(Fixnum) #=> true
x.kind_of?(Fixnum) #=> true
x.class #=> Fixnum

Module#=== 只是在施展某种无法避免的魔法吗?

最佳答案

是的,是的。 Module#=== 在 C 中实现,直接检查对象的类层次结构。看起来没有办法骗过它。

关于ruby - 用代理对象愚弄 Ruby 的 case 运算符 ===,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3528129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com