在Ruby的開發中,有時候會看到self
這個字,那他究竟代表什麼,要怎麼使用呢?
什麼是self
?
self
是一個Ruby的Keyword,簡單來說就是現在正在執行的物件(current object),而"current object"則取決於現在的"context",會有不同的結果,這樣講可能還有點模糊,不如直接來看看使用的情形。
In a method
在method中,self就是呼叫method的物件
class Animal
def instance_self
puts self
end
def self.class_self
puts self
end
end
aa = Animal.new
aa.instance_self
=> #<Animal:0x00007faba809a9d8>
Animal.class_self
=> Animal
- 在instance method中,可以看到
self
會指向object本身 - 在class method中,
self
則會指向class
In a class or module definition
這邊是指不在任何method中,self就是被定義好的class / module
class Animal
puts "From class:"
self
end
module Action
puts "From module:"
self
end
# result
From class:
=> Animal
From module:
=> Action
Default receives message
self
還有一個特性,當method沒有明確的receiver時,他就會是自動接收訊息
class Animal
attr_accessor :name
def initialize(name)
@name = name
end
def upcase_name
name.upcase
end
end
dog = Animal.new('Lucky')
dog.upcase_name
=> "LUCKY"
這裡可以看到,在upcase_name
中,並沒有指定是誰的name,但預設的receiver會是self
,所以實際上應該是self.name.updcase
,因為這是一個instance method,self是object本身,所以實際上當然就是回傳"LUCKY"
囉!
看到這邊,應該對self
有基本的概念了,下次看到它,就大概可以知道它代表什麼意思啦~