ruby - 在 ruby 模块中分配常量
问题描述
我有一个模块:
module Foo
module Bar
TEST = "ok"
def self.is_ok; true end
end
end
Foo::Bar::TEST # => "ok"
Foo::Bar.is_ok # => true
我想在定义的模块中有另一个常量,只有一次。
我试过这样:
module Foo
module Bar
TEST = is_ok
def self.is_ok; true end
end
end
然后我得到一个错误说undefined local variable or method 'is_ok' for Foo::Bar:Module
。这意味着is_ok
尚未定义。
常量是否在模块类方法之外的某个时间点定义?
此外,我还有另一个例子:
module Foo
module Bar
TEST = "ok"
def self.is_ok; true end
end
module YYY
TEST = Foo::Bar::TEST
TEST2 = Foo::Bar.is_ok
end
end
在这里,我得到:
Foo::Bar::TEST2 # => true
正如预期的那样。
解决方案
这只是定义顺序的问题:
module Foo
module Bar
def self.is_ok
true
end
TEST = is_ok
end
end
完全按照您的预期工作。
原因很简单,Ruby 类定义是逐行评估的。TEST
在您的示例中分配的时间::is_ok
尚未定义!
推荐阅读
- python - 如何以百分比形式获取列的出现频率
- java - 处理 JSON 有效负载和图像数据
- c++ - 在 vscode 终端中运行 cpp 程序后出现意外的 % 符号
- python - 将大数据集拆分为较小的组
- apache-camel - 如何使用包含对另一个模式的引用的模式验证 JSON?
- php - 有没有办法自定义 CodeIgniter 3 中 result_array() 返回的键?
- sql - 如何使用 FireDAC 中的匿名代码块在 PostgreSQL 中执行带参数的函数?
- javascript - 当使用不透明度从一个证词切换到下一个证词时,我正在尝试构建一个具有淡出过渡的证词滑块
- javascript - 使用 Express 在 nodejs 中延迟 GET 调用的响应
- python - pd.merge "TypeError: 字符串索引必须是整数"