如何查看在编译时间宏中是否定义了常数/键入



是否可以通过使用宏?

{% if defined?(::My_Class) %}
  puts "My_Class has been defined."
{% end %}

我知道可以使用TypeNode#has_constant?,但是问题必须执行是否在全局名称空间中定义了常数。

(我问的原因是因为在开发和重构期间,我发现这将是一些情况下的方便占位符,直到我可以重新编写代码库。(

您可以编写一个模拟该功能的宏。使用TypeNode#Resolve?要检查是否定义了常数,然后有条件地插入要执行的代码:

macro if_defined(path, &blok)
  {% if path.resolve? %}
    {{blok.body}}
  {% else %}
    puts "Not defined: {{path.id}} "
  {% end %}
end # === macro if_defined
if_defined(Kemal::Session::My_Constant) do
  Kemal.listen
end

在顶级范围中,宏变量@type是指该程序。您可以使用@type.has_constant?(:Foo)确定是否定义了顶级常数Foo

相关内容

  • 没有找到相关文章

最新更新