【问题标题】:How to check if a constant is defined in Crystal如何检查是否在 Crystal 中定义了常量
【发布时间】:2023-03-31 17:30:02
【问题描述】:

我需要验证是否定义了一个常量来执行条件。

我正在尝试这个,但这种语言不存在“定义”的方法:

if defined(constant)
  value = :foo
else
  value = :bar
end

【问题讨论】:

    标签: metaprogramming crystal-lang


    【解决方案1】:

    您可以使用macroTypeNode#has_constant?

    FOO = 1
    
    value = nil
    {% if @type.has_constant? "FOO" %}
      value = :foo
    {% else %}
      value = :bar
    {% end %}
    
    pp value #=> :foo
    

    或者更好的是,您可以为此编写一个简短的自定义宏:

    macro toplevel_constant_defined?(c)
      {{ @type.has_constant? c }}
    end
    
    pp toplevel_constant_defined? "FOO" # => true
    pp toplevel_constant_defined? "BAR" # => false
    

    注意:正如Jonne Haß 所提到的,您只需要在高级宏编程中使用它,在其他任何地方,无论使用何种语言,它都会产生巨大的代码气味。

    【讨论】:

    • 虽然应该注意的是,你只应该在高级宏编程中需要它,但在其他任何地方,无论使用什么语言,它都是一种巨大的代码气味。
    猜你喜欢
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2010-09-22
    • 2011-03-08
    • 2012-01-20
    • 2021-04-21
    相关资源
    最近更新 更多