我编写了一个库,它通过主要通过方法别名来观察包装器来扩展几个基本 Ruby 类。然而,我在数组实例化简写中遇到了障碍(例如@a = [1, 2, 3]
)我似乎找不到通过速记方式创建 Array 对象时实际调用的任何方法。这不是遗传#[]
当前作用域中的方法或从祖先链中的任何类或模块继承的方法。我还重载或观察了类中的每个方法#new
到一个实例的#initialize
到单例方法#[]
基于 Ruby C 代码的 Array 类对象
rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);
有谁知道如何分配一个位于速记数组实例实例化的方法链中的方法?
不幸的是,与地球上几乎所有其他编程语言一样,Ruby 不允许文字重载。如果您需要文字重载,则必须使用支持它的少数编程语言之一,例如Ioke http://Ioke.Org/ or Seph http://Seph-Lang.Org/.
这是 Ioke 中的一个例子:
[] = method(foo, foo println)
[1]
; 1
在塞夫:
[] = #(foo, foo println)
[1]
; 1
[请注意,这些当然会对您的系统造成严重破坏,因为,例如,Ioke/Seph 标准库的很大一部分是在 Ioke/Seph 中实现的,并且它们到处都使用列表,因此在生产中系统,您需要正确封装它。]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)