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

发布于 2024-07-23 05:04:11 字数 258 浏览 4 评论 0原文

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

注意:我知道“self”在其他语言中等同于“this”以及“self”如何在类/对象上运行,但是在模块/库的上下文中没有什么“self”。 那么,在没有类的模块之类的东西中, self 的上下文是什么?

Quick question regarding the use of "SELF" inside a module or library. Basically what is the scope/context of "SELF" as it pertains to a module or library and how is it to be properly used? For an example of what I'm talking about, check out the "AuthenticatedSystem" module installed with "restful_authentication".

NOTE: I'm aware that 'self' equates to 'this' in other languages and how 'self' operates on a class/object, however in the context of a module/library there is nothing to 'self'. So then what is the context of self inside something like a module where there is no class?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

德意的啸 2024-07-30 05:04:11

在模块中:

当您在实例方法中看到 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

In a module:

When you see self in an instance method, it refers to the instance of the class in which the module is included.

When you see self outside of an instance method, it refers to the module.

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
夏天碎花小短裙 2024-07-30 05:04:11

简短的总结...
http://paulbarry.com/articles/2008/ 04/17/the-rules-of-ruby-self

self 还用于添加类方法(或 C#/Java 人员的静态方法)。 以下代码片段将一个名为 do_something 的方法添加到当前类对象(静态)...

class MyClass
    def self.do_something   # class method
       # something
    end
    def do_something_else   # instance method
    end
end

For a short summary...
http://paulbarry.com/articles/2008/04/17/the-rules-of-ruby-self

self is also used to add class methods (or static methods for C#/Java people). The following snippet is adding a method called do_something to the current class object (static)...

class MyClass
    def self.do_something   # class method
       # something
    end
    def do_something_else   # instance method
    end
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文