Crystal lang : 在宏中,向调用节点添加参数的最佳实践

Crystal lang : in macro, best practice to add an argument to a Calling node

Call#args is of type ArrayLiteral 但 ArrayLiteral 没有任何插入元素的方法。所以我的问题是如何优雅地在调用中添加一个参数。

我只知道这种笨办法:

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#<< 来实现,例如