我想要一种方法来检测是否将块分配给了宏,该宏的行为取决于此。
对于方法,我可以定义两个方法来处理不同的情况,一个方法显式使用block参数,而另一个方法则不。编译器将按预期方式调用正确的方法。
但是对于宏,我发现编译器并不关心block参数的多态性-每当给出块时,它总是调用第一个宏。
答案 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