调用#args的类型为ArrayLiteral,但ArrayLittle没有任何方法来插入元素。所以我的问题是如何在优雅的调用中添加一个参数。
我只知道这种愚蠢的方式:
macro method_missing(call)
Delegator.{{call.name}}("a new parameter", {{call.args}}) {{call.block}}
end
但是很难处理#named_arg
,尤其是#splat_index
(尽管它是Block
的成员,但这里有相同的问题(
是否存在一些更好的方法,或者它是编译器开发人员的待办事项?
ArrayLiteral
实际上可以修改,它提供了几种添加元素的方法:#<<
、#[]=
、#push
、#unshift
。
没有字面意义上的#insert
,但您似乎并没有明确地寻找它。它可能会被添加到宏解释器中。但是它也可以用例如#select
和#<<
来实现。