繁体   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