5
我需要驗證一個常量是否被定義爲執行條件。如何檢查一個常量是否在晶體中定義
我想這一點,但「規定」的方法不存在於這個語言:
if defined(constant)
value = :foo
else
value = :bar
end
我需要驗證一個常量是否被定義爲執行條件。如何檢查一個常量是否在晶體中定義
我想這一點,但「規定」的方法不存在於這個語言:
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ß謝謝。我爲此添加了一條便條 –