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