我可以在方法中使用类型化参数:
def my_method(val1, val2 : String? = nil)
# something
end
但我不能在 macro
(crystal play example)做同样的事情
macro my_macro(val1, v22 : String?)
puts {{val1}}
puts {{v22}}
end
我有例外
Syntax error in eval:1: unexpected token: : (expected ',' or ')')
是否可以在 macro
中使用预定义类型?
我需要这样的东西:
macro my_macro(val1, val2_key val2 : String? = nil)
# do
end
谢谢!
1 回答
首先,宏中使用的类型与普通代码中的类型不同,例如,当您执行
some_macro "a string"
时,在编译时"a string"
的类型是StringLiteral
.其次,目前不可能对宏的论点进行限制..
你唯一能做的就是删除类型限制,并在开头添加一个if语句来检查参数的类型,如:
如果你想要这个功能,你可以在Github上的问题跟踪器上打开一个问题,我认为还没有 .