gpt4 book ai didi

ruby - 重载 Ruby 的 [...] 数组创建速记

转载 作者:数据小太阳 更新时间:2023-10-29 07:36:50 35 4
gpt4 key购买 nike

我编写了一个库,主要通过方法别名使用观察包装器扩展几个 Ruby 基类。但是,我遇到了数组实例化简写的障碍(例如 @a = [1, 2, 3] )我似乎找不到在创建数组时实际调用的任何方法数组对象的简写方式。它不是当前范围内继承的 #[] 方法,也不是从祖先链中的任何类或模块继承的。我还重载或观察了从类的 #new 到实例的 #initialize 到 Array 类上的 singleton_method #[] 的每个方法基于 Ruby C 代码的对象

rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);

有谁知道如何分配一个方法,该方法将位于速记 Array 实例实例化的方法链中?

最佳答案

不幸的是,就像地球上几乎所有其他编程语言一样,Ruby 不允许文字重载。如果你需要文字重载,你将不得不使用支持它的少数编程语言之一,比如 IokeSeph .

这是 Ioke 中的示例:

[] = method(foo, foo println)
[1]
; 1

在 Seph 中:

[] = #(foo, foo println)
[1]
; 1

[请注意,这些当然会对您的系统造成严重破坏,因为,例如,Ioke/Seph 标准库的很大一部分是在 Ioke/Seph 中实现的,并且它们到处都使用列表,所以在生产系统中,您需要适本地封装它。]

关于ruby - 重载 Ruby 的 [...] 数组创建速记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116917/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com