【发布时间】:2018-09-25 03:07:18
【问题描述】:
我想要一种方法来检测是否给宏一个块,其行为取决于此。
对于方法,我可以定义两种方法来处理不同的情况,一种显式使用块参数,另一种没有。编译器会按预期调用正确的方法。
但是对于宏,我发现编译器并不关心块参数的多态性——它总是在给定块时调用第一个宏。
【问题讨论】:
标签: crystal-lang
我想要一种方法来检测是否给宏一个块,其行为取决于此。
对于方法,我可以定义两种方法来处理不同的情况,一种显式使用块参数,另一种没有。编译器会按预期调用正确的方法。
但是对于宏,我发现编译器并不关心块参数的多态性——它总是在给定块时调用第一个宏。
【问题讨论】:
标签: crystal-lang
我不确定我是否理解正确,但也许简单的检查对你有帮助?
macro name(*args, &block)
{% if block %}
puts "with block"
{% else %}
puts "without block"
{% end %}
end
name do
"1"
end
#=> with block
name("1")
#=> without block
【讨论】: