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



调用#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#<<来实现。

相关内容

  • 没有找到相关文章

最新更新