2017-08-27 2 views

Répondre

5

Vous pouvez utiliser macro et TypeNode#has_constant?:

FOO = 1 

value = nil 
{% if @type.has_constant? "FOO" %} 
    value = :foo 
{% else %} 
    value = :bar 
{% end %} 

pp value #=> :foo 

Ou mieux encore, vous pouvez écrire une courte personnalisée macro pour cela:

macro toplevel_constant_defined?(c) 
    {{ @type.has_constant? c }} 
end 

pp toplevel_constant_defined? "FOO" # => true 
pp toplevel_constant_defined? "BAR" # => false 

Remarque : comme mentionné par Jonne Haß, vous seulement besoin de cela dans la programmation avancée de macro, partout ailleurs c'est une énorme odeur de code, quelle que soit la langue utilisée.

+0

Bien qu'il soit à noter que vous ne devriez jamais avoir besoin de cela dans la programmation avancée de macro, partout ailleurs c'est une énorme odeur de code, indépendamment de la langue utilisée. –

+0

@ JonneHaß merci. J'ai ajouté une note pour ça –