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