重载Ruby的[…]数组创建速记

重载Ruby的[…]数组创建速记,第1张

概述我编写了一个扩展几个基类 Ruby类的库,主要通过方法别名来观察包装器.但是,我用数组实例化速记(例如@a = [1,2,3])遇到了障碍我似乎无法通过简写方式找到在创建Array对象时实际调用的任何方法.它不是当前作用域中的继承#[]方法,也不是祖先链中的任何类或模块继承的方法.我还基于Ruby C代码重载或观察了类的#new到实例的#initialize到Array类对象上的singleton 我编写了一个扩展几个基类 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中实现的,并且它们在整个地方使用列表,因此在生产中系统,你要正确封装它.]

总结

以上是内存溢出为你收集整理的重载Ruby的[…]数组创建速记全部内容,希望文章能够帮你解决重载Ruby的[…]数组创建速记所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1272306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存