Ruby中是否有方法引用類的當前實例,其方式是self
引用類本身?類似`self`的Ruby方法引用實例
回答
self
總是指一個實例,但一個類本身就是Class
的一個實例。在某些情況下,self
將涉及這樣的實例。
class Hello
# We are inside the body of the class, so `self`
# refers to the current instance of `Class`
p self
def foo
# We are inside an instance method, so `self`
# refers to the current instance of `Hello`
return self
end
# This defines a class method, since `self` refers to `Hello`
def self.bar
return self
end
end
h = Hello.new
p h.foo
p Hello.bar
輸出:
Hello
#<Hello:0x7ffa68338190>
Hello
不好意思選擇這個,但是第一個'p self'實際上是在解析類定義的時候執行的。 'h = Hello.new'實際上會返回與'h.foo'相同的值。我提到這一點是爲了防止列出的輸出可能誤導一些新的Rubyist。 – lilole
在類self
的實例方法是指該實例。要獲得實例中的課程,您可以撥打self.class
。如果您在類方法中調用self
,您將獲得該類。在類方法中,您無法訪問該類的任何實例。
self
引用始終可用,它指向的對象取決於上下文。
class Example
self # refers to the Example class object
def instance_method
self # refers to the receiver of the :instance_method message
end
end
不要忘記類方法 – ahnbizcad
方法self
引用它所屬的對象。類定義也是對象。
如果您在類定義中使用self
,它將引用類定義的對象(對類),如果您在類方法中調用它,它將再次引用該類。
但是在實例方法中,它指的是作爲類實例的對象。
1.9.3p194 :145 > class A
1.9.3p194 :146?> puts "%s %s %s"%[self.__id__, self, self.class] #1
1.9.3p194 :147?> def my_instance_method
1.9.3p194 :148?> puts "%s %s %s"%[self.__id__, self, self.class] #2
1.9.3p194 :149?> end
1.9.3p194 :150?> def self.my_class_method
1.9.3p194 :151?> puts "%s %s %s"%[self.__id__, self, self.class] #3
1.9.3p194 :152?> end
1.9.3p194 :153?> end
85789490 A Class
=> nil
1.9.3p194 :154 > A.my_class_method #4
85789490 A Class
=> nil
1.9.3p194 :155 > a=A.new
=> #<A:0xacb348c>
1.9.3p194 :156 > a.my_instance_method #5
90544710 #<A:0xacb348c> A
=> nil
1.9.3p194 :157 >
您會看到在類聲明期間執行的放置#1。它顯示class A
是類型爲id == 85789490的對象。所以在類聲明自我中就是指類。
然後,當類方法被調用(#4)self
裏面的類方法(#2)再次引用該類。
當調用一個實例方法(#5)時,它顯示它內部(#3)self
引用該方法所連接的類實例的對象。
如果您需要引用實例方法中使用類self.class
可能是你需要:自己的方法?
1.itself => 1
'1'.itself => '1'
nil.itself => nil
希望這有助於!
- 1. 類方法中的Ruby實例引用?
- 2. 如何從ruby實例方法返回self的新實例
- 3. 在Python中使用「__init __(self)」方法獲取類的實例
- 4. 來自實例方法的Ruby調用類方法
- 5. 從Ruby的類方法調用私有實例方法
- 6. 瞭解Ruby類VS實例方法
- 7. Ruby - 類實例變量getter setter方法
- 8. Ruby on Rails實例vs類方法
- 9. Ruby方法類似attr_reader
- 10. Ruby - 返回實例並修改該實例的類方法
- 11. 實例方法與類方法對於輔助類 - Ruby,Rails
- 12. 單例模塊或類方法+類實例變量在Ruby中類似單例的行爲?
- 13. 如何在單例類中使用「self」來訪問實例方法?
- 14. self ::引用父類的靜態方法中的派生類
- 15. 從實例方法實例化組合類Ruby
- 16. ruby方法應該修改類的實例方法嗎?
- 17. 提供相同名稱的類和實例方法的Ruby類
- 18. Ruby類似於Haskells循環的方法
- 19. Ruby:調用另一個類的實例方法
- 20. Ruby:類實例化的快捷方式
- 21. 嘗試從ruby中的類方法返回類實例
- 22. 無法從共享方法中引用類的實例成員
- 23. 是一個對象(某個類的實例)的方法與Ruby中它的類的實例方法相同嗎?
- 24. 參數到Ruby中的實例方法
- 25. Ruby字符串中的實例方法?
- 26. 呼叫實例方法與類的實例變量 - Ruby on Rails的
- 27. 確實Python有一個方法來實現類似C#索引?
- 28. Ruby:在實例和類方法中重用代碼
- 29. Ruby機架調用:類vs實例方法?
- 30. 在類方法中使用實例變量 - Ruby
'self' * does *是指實例。你有一個具體的例子嗎? –