我编写了一个扩展几个基类
Ruby类的库,主要通过方法别名来观察包装器.但是,我用数组实例化速记(例如@a = [1,2,3])遇到了障碍我似乎无法通过简写方式找到在创建Array对象时实际调用的任何方法.它不是当前作用域中的继承#[]方法,也不是祖先链中的任何类或模块继承的方法.我还基于Ruby C代码重载或观察了类的#new到实例的#initialize到Array类对象上的singleton_method#[]的每个方法
rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);
有谁知道如何分配一个方法,该方法将在速记数组实例实例化的方法链中?
最佳答案 不幸的是,就像地球上几乎所有其他编程语言一样,Ruby不允许重载文字.如果您需要文字重载,则必须使用支持它的少数编程语言之一,如
Ioke或
Seph.
这是Ioke的一个例子:
[] = method(foo, foo println)
[1]
; 1
在Seph:
[] = #(foo, foo println)
[1]
; 1
[请注意,这些会对您的系统造成严重破坏,因为,例如,Ioke / Seph标准库的很大一部分是在Ioke / Seph中实现的,并且它们在整个地方使用列表,因此在生产中系统,你要正确封装它.]