(Ruby,Rails)SELF在模块和库中的上下文......?

hum*_*der 28 ruby scope ruby-on-rails self

关于在模块或库中使用"SELF"的快速问题.基本上什么是"SELF"的范围/上下文,因为它与模块或库有关,如何正确使用?有关我正在讨论的示例,请查看安装了"restful_authentication"的"AuthenticatedSystem"模块.

注意:我知道'self'在其他语言中等同于'this'以及'self'如何在类/对象上操作,但是在模块/库的上下文中没有"自我".那么,在没有类的模块中,自我的上下文是什么?

Sar*_*Mei 47

在一个模块中:

当您self在实例方法中看到它时,它引用包含该模块的类的实例.

当您看到self实例方法的外部时,它指的是模块.

module Foo
  def a
    puts "a: I am a #{self.class.name}"
  end

  def Foo.b
    puts "b: I am a #{self.class.name}"
  end

  def self.c
    puts "c: I am a #{self.class.name}"
  end
end

class Bar
  include Foo

  def try_it
    a
    Foo.b # Bar.b undefined
    Foo.c # Bar.c undefined
  end
end

Bar.new.try_it
#>> a: I am a Bar
#>> b: I am a Module
#>> c: I am a Module
Run Code Online (Sandbox Code Playgroud)

  • 恰恰。Ruby 中的一切都是对象。没有 self 的地方就没有可以执行代码的地方。 (2认同)