bhu*_*uga 5 ruby proxy introspection case operators
我正在尝试创建一个代理对象,它几乎将所有方法调用传递给子对象,实质上是委托者模式.在大多数情况下,我只是使用BasicObject并将每个使用method_missing的调用传递给子对象.到现在为止还挺好.
诀窍是尽我所能,我不能欺骗Ruby的case操作符,所以我做不到:
x = Proxy.new(15)
Fixnum === x #=> false, no matter what I do
Run Code Online (Sandbox Code Playgroud)
这当然会使任何case x操作失败,这意味着代理不能安全地传递给其他库.
我不能为我的生活找出===正在使用的东西.代理适用于我所知道的所有基于类的内省,它都正确地传递给子对象:
x.is_a?(Fixnum) #=> true
x.instance_of?(Fixnum) #=> true
x.kind_of?(Fixnum) #=> true
x.class #=> Fixnum
Run Code Online (Sandbox Code Playgroud)
难道Module#===只是在做某种魔力,无法避免?
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |