我在理解self关键字时遇到问题。
我理解它是如何用来区分实例方法和类方法的,但是当它在方法内部使用时呢?
就像是:
def self.name
self.name = "TEXT"
end
Run Code Online (Sandbox Code Playgroud)
或者
def name2
self.name = "TEXT2"
end
Run Code Online (Sandbox Code Playgroud)
或者
class Array
def iterate!(&code)
self.each_with_index do |n, i|
self[i] = code.call(n)
end
end
end
Run Code Online (Sandbox Code Playgroud)
通常,self由于可以省略接收器,在这种情况下,通常最好这样做。但是,在某些情况下,省略self使代码具有其他含义。
一种这样的情况是,如在您的示例中self.name = ...,使用 setter 方法。Ruby 的语法在方法和变量调用之间存在歧义,当可以解释为变量或方法的东西后跟 时=,将其解释为局部变量赋值具有优先权。
另一种情况是当您想要调用方法时class。还有关键字class,class作为关键字的解释优先于它作为方法。
还有一种情况是当您想使用该方法时[]。这种表示法也用于数组字面量,将其解释为数组优先于作为方法的它。
在每一种情况下,您都必须使表达式明确地成为方法调用。一种方法是显式写入接收器,即使它是self。另一种方式是写()在方法之后。
关于您的示例self.each_with_index ...,self可以省略,不这样做不是推荐的做法。
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |