【发布时间】:2023-03-31 17:30:02
【问题描述】:
我需要验证是否定义了一个常量来执行条件。
我正在尝试这个,但这种语言不存在“定义”的方法:
if defined(constant)
value = :foo
else
value = :bar
end
【问题讨论】:
标签: metaprogramming crystal-lang
我需要验证是否定义了一个常量来执行条件。
我正在尝试这个,但这种语言不存在“定义”的方法:
if defined(constant)
value = :foo
else
value = :bar
end
【问题讨论】:
标签: metaprogramming crystal-lang
您可以使用macro 和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ß 所提到的,您只需要在高级宏编程中使用它,在其他任何地方,无论使用何种语言,它都会产生巨大的代码气味。
【讨论】: