我與紅寶石(2.4.1p111)實驗和與負載方法,它確實有一些奇怪的行爲:紅寶石負載不看靜態方法的類
我有兩個文件:
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'中,它將被調用,就像它一樣。如果不是,它不會,無論你在哪裏加載它。 – ndn
https://ruby-doc.org/core-2.4.1/Kernel.html#method-i-load 我錯誤地認爲加載的代碼是在MyClass的上下文中執行的。 @MatayoshiMariano指出MyClass.greet的工作。 – Pavel
@Pavel「我錯誤地認爲加載的代碼是在MyClass的上下文中執行的。」這不是MatayoshiMariano指出的。這個答案忽略了這一點。 – sawa