为
static
我知道了
class Y
def initialize(@a : String)
end
getter a
end
class X
macro test(name)
@{{name}} = y.{{name}}
end
@a : String
def initialize(y : Y)
test a
end
end
为什么?并将@a设置为nil确实解决了问题,但是我认为这不是一个好的解决方法。
是错误,设计限制还是只是我没有做正确的事?
答案 0 :(得分:1)
是的,当前这是设计限制。用https://github.com/crystal-lang/crystal/issues/2731
引用Ary是的,这是预期的行为。初始化必须足够简单,以便编译器进行分析。宏可能会在子类中重新定义,因此解析init对于初次通过而言并不简单。
这对我来说是“无法解决”的,或者我们可以将其标记为增强功能,但不会很快发生(也许永远不会发生)
我引入了一种技巧,可以通过宏进行初始化:如果提到
{{@type}}
,则编译器将延迟检查调用的方法。但是,没有记录。它有几个错误。但是现在可能还可以。