什么时候使用自己
大多数 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