【问题标题】:How to create a tuple using constructor inside macro in crystal lang如何在水晶语言的宏中使用构造函数创建一个元组
【发布时间】:2020-02-27 03:58:22
【问题描述】:

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


{% empty_tuple = Tuple.new %}

这是水晶游戏的链接-https://play.crystal-lang.org/#/r/8mxf

如果我不能这样做,请告诉我是否有任何替代方法

更新 1

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

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

这是我正在尝试做的水晶播放链接 - https://play.crystal-lang.org/#/r/8n4g

更新 2

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

args = {1}

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

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

但它也不起作用。

【问题讨论】:

  • 听起来你有点滥用宏,我无法理解这个的合法用例。无论如何,只使用一个常量外部宏域应该可以工作并且可以在宏域中引用。
  • @JonneHaß 我正在做一个大项目,所以我需要在多个地方使用宏来完成任务。你能不能给我一个你在说什么的水晶播放链接?
  • 你为什么需要这个?
  • @asterite 我正在尝试创建类的实例并使用 splat 将 args 传递给构造函数。我可以使用条件检查来解决这个问题,但最初我是这样想的。
  • 你不能在宏代码之外创建空元组吗?为什么在宏代码中需要它?

标签: tuples crystal-lang


【解决方案1】:

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

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

但它不是,它是一个空数组

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

否则

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

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 2016-07-26
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多