如何检查一个常量是否在晶体中定义
问题描述:
我需要验证一个常量是否被定义为执行条件。如何检查一个常量是否在晶体中定义
我想这一点,但“规定”的方法不存在于这个语言:
if defined(constant)
value = :foo
else
value = :bar
end
答
您可以使用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ß所提到的那样,无论使用哪种语言,您在高级宏编程中都只需要这样的编程,在其他任何地方它都是一个巨大的代码异味。
虽然应该指出,在高级宏编程中你只需要使用它,但无论使用何种语言,在任何其他地方都会产生巨大的代码异味。 –
@JonneHaß谢谢。我为此添加了一条便条 –