2017-08-27 81 views

Odpowiedz

5

Można wykorzystać macro i TypeNode#has_constant?:

FOO = 1 

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

pp value #=> :foo 

lub nawet lepiej, można napisać krótki zwyczaj makro dla tego:

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

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

Notatka : jak wspomniano przez Jonne Haß, zawsze powinieneś tego potrzebować w zaawansowanym programowaniu makr, wszędzie indziej jest to ogromny zapach kodu, niezależnie od używanego języka.

+0

Należy jednak zauważyć, że w zaawansowanym programowaniu makr można potrzebować tego tylko w dowolnym miejscu, wszędzie tam, gdzie jest to ogromny zapach kodu, niezależnie od używanego języka. –

+0

@ JonneHaß dziękuję. Dodałem do tego notatkę –