什么是“其他”对象以及它是如何工作的?

时间:2016-04-11 14:08:05

标签: ruby

我在课堂比较中经常使用other,例如

def ==(other)
  ...
end

def eql?(other)
  self == other
end

但我仍然没有找到它实际上是什么的解释。这里发生了什么?

也许这是另一个问题,但是用==开始一个方法意味着什么呢?

5 个答案:

答案 0 :(得分:3)

other是此方法的参数,即传递的对象。

例如:

class A
  def ==(other)
    :lala == other
  end
end

obj = A.new
obj.==(:foo) # full syntax, just like any other method
# but there's also a shorthand for operators:
obj == :foo  # => false
obj == :lala # => true

答案 1 :(得分:3)

在ruby中,运算符实际上是方法调用。如果您有两个变量ab并希望检查它们的相等性,那么通常会写a == b,但您可以编写a.==(b)。最后一个语法显示了在相等性检查期间发生的事情:ruby调用a的方法==并将其作为参数传递给它{。}}。

您可以通过定义b和/或==方法在类中实现自定义相等性检查。在您的示例中,eql?只是它接收的参数的名称。

other

对于您的第二个问题,允许您实施class Person attr_accessor :name def initialize name @name = name end end a = Person.new("John") b = Person.new("John") a == b # --> false class Person def == other name == other.name end end a == b # --> true 的唯一方法是====。点击此处查看ruby中方法名称限制的完整列表:What are the restrictions for method names in Ruby?

答案 2 :(得分:2)

other==的参数,它代表您要比较的对象

实施例

x == y

==对象上的x方法(是的,它只是一种方法!),以y作为参数进行调用。

欢迎使用Ruby,一段时间后你会爱上它:)

答案 3 :(得分:0)

在这种情况下,

other是您要比较的对象,因此:

class SomeClass
  def ==(other)
    self == other
  end
end

表示:

SomeClass.new == nil # here "other" is nil, this returns false

基本上def ==(other)==运算符的实现,适用于您在类中使用==进行比较的特定的情况。

答案 4 :(得分:0)

对于数字,您可以使用以下方法获得2个数字的总和:

a= x + y
在Ruby中,一切都是对象,对吧!因此xy是对象,对于数字(对象)x,它有一个定义的方法+,它接受​​1个参数y

对于你想要理解的内容是一样的,如果你有2个类并且你想要检查它们是否相等以及它是你的定义类,你想要指定它们如何相等,例如,如果它们{{1 }}属性相等然后你可以说:

name