【问题标题】:Crystal lang : `block_given` in Macro?Crystal lang:宏中的`block_given`?
【发布时间】:2018-09-25 03:07:18
【问题描述】:

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

对于方法,我可以定义两种方法来处理不同的情况,一种显式使用块参数,另一种没有。编译器会按预期调用正确的方法。

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

【问题讨论】:

    标签: crystal-lang


    【解决方案1】:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多