2009-06-08 38 views
26

有關在模塊或庫中使用「SELF」的快速問題。基本上什麼是「SELF」的範圍/上下文,因爲它涉及到一個模塊或庫,以及它如何正確使用?有關我正在談論的示例,請查看使用「restful_authentication」安裝的「AuthenticatedSystem」模塊。(Ruby,Rails)模塊和庫中SELF的上下文......?

注意:我知道'self'等同於'this'在其他語言中,以及'self'如何在類/對象上運行,但是在模塊/庫的上下文中沒有任何'self' 。那麼,在沒有類的模塊之類的東西里面,自我的內容是什麼?

回答

44

方法......在一個模塊:

當您在一個實例方法看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 
+1

準確地說。一切都是Ruby中的一個對象。沒有地方的代碼可以在沒有自我的地方執行。 – Chuck 2009-06-08 23:23:47

0

對於一個簡短的總結... http://paulbarry.com/articles/2008/04/17/the-rules-of-ruby-self

自我也被用來添加類方法(或靜態方法對C#/ Java的人)。下面的代碼片段是添加了一個名爲do_something當前類對象(靜態)

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