重载Ruby的[…]数组创建速记
发布时间:2020-12-17 07:09:01 所属栏目:百科 来源:网络整理
导读:我编写了一个扩展几个基类 Ruby类的库,主要通过方法别名来观察包装器.但是,我用数组实例化速记(例如@a = [1,2,3])遇到了障碍我似乎无法通过简写方式找到在创建Array对象时实际调用的任何方法.它不是当前作用域中的继承#[]方法,也不是祖先链中的任何类或模块
我编写了一个扩展几个基类
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中实现的,并且它们在整个地方使用列表,因此在生产中系统,你要正确封装它.] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |