2017-08-27 58 views

回答

5

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

+0

虽然应该指出,在高级宏编程中你只需要使用它,但无论使用何种语言,在任何其他地方都会产生巨大的代码异味。 –

+0

@JonneHaß谢谢。我为此添加了一条便条 –

相关问题