水晶郎:宏中的``block_given''?

时间:2018-09-25 03:07:19

标签: crystal-lang

我想要一种方法来检测是否将块分配给了宏,该宏的行为取决于此。

对于方法,我可以定义两个方法来处理不同的情况,一个方法显式使用block参数,而另一个方法则不。编译器将按预期方式调用正确的方法。

但是对于宏,我发现编译器并不关心block参数的多态性-每当给出块时,它总是调用第一个宏。

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解正确,但是也许简单的检查对您有帮助?

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

https://carc.in/#/r/53yy