[英]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.