2017-08-27 56 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ß謝謝。我爲此添加了一條便條 –

相關問題