首页 文章

Crystal lang:宏中的`block_given`?

提问于
浏览
1

我想要一种方法来检测是否给宏一个块,其行为取决于此 .

对于方法,我可以定义两个方法来处理不同的情况,一个是明确的块参数而另一个不是 . 编译器将按预期调用正确的方法 .

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

1 回答

  • 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

相关问题