[英]Ruby load does not see static methods in the class
我正在尝试使用ruby(2.4.1p111)和load方法,它确实有一些奇怪的行为:
我有两个文件:
mytest.rb :
class MyClass
def self.greet(param)
puts "Got called: #{param}"
end
greet 'Called locally'
load "./testld.rb"
end
和加载的文件:
testld.rb :
greet 'Called by load'
我从文档中了解到,从testld.rb加载的代码和MyClass中的方法调用应具有相同的行为。 相反,我得到:
-bash-4.2$ ruby mytest.rb
Got called: Called locally
/Blacksmith/RB/testld.rb:1:in `<top (required)>': undefined method `greet'
for main:Object (NoMethodError)
from mytest.rb:9:in `load'
from mytest.rb:9:in `<class:MyClass>'
from mytest.rb:1:in `<main>'
知道我做错了什么吗?
您需要在testld.rb
调用MyClass.greet
,这是因为greet
是在MyClass
类中定义的类方法。
这是类方法的文档。
无论您在哪里加载文件,都始终在主环境中评估加载的文件。 在testld.rb
的主要环境中, self
的值是整个脚本的主要环境。 因此,您的
greet 'Called by load'
不等于
MyClass.greet 'Called by load'
如您所料。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.