如何在 crystal lang 中使用宏中的构造函数创建元组

How to create a tuple using constructor inside macro in crystal lang

我试图在宏中创建一个空元组但出现错误 - 错误:未定义的宏方法 'TypeNode#new'


{% empty_tuple = Tuple.new %}

这里是link到crystal播放-https://play.crystal-lang.org/#/r/8mxf

如果我不能这样做,请告诉我是否有其他选择

更新 1

我正在尝试初始化一个 class - 有些情况 class 构造函数有参数,有些没有

所以我想到了使用带有 splat 的元组来传递参数。

这是 crystal 播放 link 我正在尝试做的事情 - https://play.crystal-lang.org/#/r/8n4g

更新 2

您可以使用直接语法创建元组

args = {1}

但如果您想创建空元组,这将不起作用,因为散列语法相似并且编译器会在提供散列声明类型时抛出错误。

所以我考虑使用构造函数语法 - Tuple.new

但是也没用。

我试图使用宏创建许多 classes 的实例,这就是我选择这种方法的原因。

因为我无法在宏中创建空元组。我想出了一个 hack - 如果我得到一些没有任何 args 的方法的 args,这意味着它将是空元组,对吗?

but it was not, it was an empty array

我又一次被卡住了。所以我用了

if else

解决这个问题。基本上检查 class 是否需要使用 args 启动,然后创建一个 class 并在构造函数中传递参数,否则在没有任何 args 的情况下启动 class。

希望这对某人有所帮助。