如何检查常量是否在 Crystal 中定义



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

我正在尝试这个,但这种语言上不存在"定义"方法:

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

您可以使用宏和 TypeNode#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ß 所提到的,你只需要在高级宏编程中需要它,在其他任何地方,无论使用哪种语言,它都是一个巨大的代码气味。

相关内容

  • 没有找到相关文章

最新更新