簡體   English   中英

Ruby加載在類中看不到靜態方法

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM