gpt4 book ai didi

metaprogramming - 如何检查是否在 Crystal 中定义了常量

转载 作者:行者123 更新时间:2023-12-03 13:32:05 25 4
gpt4 key购买 nike

我需要验证是否定义了一个常量来执行条件。

我正在尝试此操作,但此语言中不存在“定义”方法:

if defined(constant)
value = :foo
else
value = :bar
end

最佳答案

您可以使用 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ß 所提到的,您只需要在高级宏编程中使用它,在其他任何地方,无论使用何种语言,它都是一种巨大的代码气味。

关于metaprogramming - 如何检查是否在 Crystal 中定义了常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45907865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com