关于在模块或库中使用“SELF”的问题,请问它的范围/上下文是什么,以及如何正确使用它?对于我所讲的内容的示例,请查看安装了“restful_authentication”中的“AuthenticatedSystem”模块。
注意:我知道在其他语言中'self'等同于'this',以及'self'如何在类/对象上操作,但在模块/库的上下文中没有任何要指向的'self'。那么,在像没有类的模块中,“self”的上下文是什么呢?
关于在模块或库中使用“SELF”的问题,请问它的范围/上下文是什么,以及如何正确使用它?对于我所讲的内容的示例,请查看安装了“restful_authentication”中的“AuthenticatedSystem”模块。
注意:我知道在其他语言中'self'等同于'this',以及'self'如何在类/对象上操作,但在模块/库的上下文中没有任何要指向的'self'。那么,在像没有类的模块中,“self”的上下文是什么呢?
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
简而言之... 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