什麼時候使用自己
大多數 Ruby 程式碼都使用隱式接收器,因此 Ruby 新手的程式設計師經常對何時使用 self
感到困惑。實際的答案是 self
主要用於兩個方面:
1.更換接收器
通常,def
在類或模組中的行為是建立例項方法。Self 可以用來定義類的方法。
class Foo
def bar
1
end
def self.bar
2
end
end
Foo.new.bar #=> 1
Foo.bar #=> 2
2.消除接收者的歧義
當區域性變數可能與方法具有相同名稱時,可能需要顯式接收器消除歧義。
例子:
class Example
def foo
1
end
def bar
foo + 1
end
def baz(foo)
self.foo + foo # self.foo is the method, foo is the local variable
end
def qux
bar = 2
self.bar + bar # self.bar is the method, bar is the local variable
end
end
Example.new.foo #=> 1
Example.new.bar #=> 2
Example.new.baz(2) #=> 3
Example.new.qux #=> 4
需要消除歧義的另一種常見情況涉及以等號結束的方法。例如:
class Example
def foo=(input)
@foo = input
end
def get_foo
@foo
end
def bar(input)
foo = input # will create a local variable
end
def baz(input)
self.foo = input # will call the method
end
end
e = Example.new
e.get_foo #=> nil
e.foo = 1
e.get_foo #=> 1
e.bar(2)
e.get_foo #=> 1
e.baz(2)
e.get_foo #=> 2