Osm*_*ond 6 metaprogramming crystal-lang
我需要验证是否定义了常量来执行条件.
我试过这个,但这种语言不存在"定义"方法:
if defined(constant)
value = :foo
else
value = :bar
end
Run Code Online (Sandbox Code Playgroud)
你可以使用宏和TypeNode#has_constant吗?:
FOO = 1
value = nil
{% if @type.has_constant? "FOO" %}
value = :foo
{% else %}
value = :bar
{% end %}
pp value #=> :foo
Run Code Online (Sandbox Code Playgroud)
或者甚至更好,您可以为此编写一个简短的自定义宏:
macro toplevel_constant_defined?(c)
{{ @type.has_constant? c }}
end
pp toplevel_constant_defined? "FOO" # => true
pp toplevel_constant_defined? "BAR" # => false
Run Code Online (Sandbox Code Playgroud)
注意:正如JonneHaß所提到的,你只需要在高级宏编程中使用它,在任何其他地方它都是一个巨大的代码味道,无论使用何种语言.
| 归档时间: |
|
| 查看次数: |
342 次 |
| 最近记录: |