如何使用Ruby“ self”关键字

问题描述 投票:3回答:4

我在理解self关键字时遇到问题。

我了解它是如何用于区分实例方法和类方法的,但是何时从方法内部使用它呢?

类似:

def self.name
  self.name = "TEXT"
end

def name2
  self.name = "TEXT2"
end

class Array
  def iterate!(&code)
    self.each_with_index do |n, i|
      self[i] = code.call(n)
    end
  end
end
ruby self
4个回答
5
投票

通常,可以省略self作为接收器,在这种情况下,通常最好这样做。但是,在某些情况下,省略self会使代码具有其他含义。

  • 一种情况是,如您的示例self.name = ...,使用setter方法。 Ruby的语法在方法和变量调用之间是模棱两可的,并且当可以解释为变量或方法的内容后接=时,将其解释为局部变量分配具有优先权。

  • 另一种情况是您要调用方法class。还有关键字class,并且作为方法的解释优先于class作为关键字。

  • 还有另一种情况是您想使用方法[]。此表示法还用于数组文字,并且作为方法的解释优先于数组。

在每种情况下,您都必须使表达式毫无疑问地成为方法调用。一种方法是显式写入接收器,即使它是self。另一种方法是在该方法之后写入()

关于您的示例self.each_with_index ...,可以省略self,不建议这样做。


3
投票

self绝对与实例方法和类方法之间的区别无关。实际上,它们之间甚至没有区别,因为Ruby没有have类方法。 Ruby只有实例方法。Ruby中的self与其他所有面向对象的语言中的self(有时也称为this)相同:它是对当前对象的引用。仅此而已。它实际上只是“我自己”的指针。

self实际上在Ruby中定义了您的作用域。当您从模块切换到类,从类切换到方法等时,范围会不断变化。...


1
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.