我在课堂比较中经常使用other
,例如
def ==(other)
...
end
或
def eql?(other)
self == other
end
但我仍然没有找到它实际上是什么的解释。这里发生了什么?
也许这是另一个问题,但是用==
开始一个方法意味着什么呢?
答案 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中,运算符实际上是方法调用。如果您有两个变量a
和b
并希望检查它们的相等性,那么通常会写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中,一切都是对象,对吧!因此x
和y
是对象,对于数字(对象)x
,它有一个定义的方法+
,它接受1个参数y
对于你想要理解的内容是一样的,如果你有2个类并且你想要检查它们是否相等以及它是你的定义类,你想要指定它们如何相等,例如,如果它们{{1 }}属性相等然后你可以说:
name