如果我们有<
,>
和==
,则总订单由这些确定。我们为什么需要<=>
?
答案 0 :(得分:1)
答案 1 :(得分:0)
<=>
是Comparable的基础,因此您不必自己实现所有比较功能。只需实现一个函数而不是三个函数,它更容易且更不容易出错。
答案 2 :(得分:-1)
“太空船”运营商用于比较,而非平等。它在概念上与C的strcmp
函数类似。
来自String
班级:
string <=> other_string
→-1,0,+ 1或nil比较 - 返回-1,0,+ 1或nil,具体取决于string是否小于,等于或大于other_string。
简而言之,==
返回表示相等的布尔值,而<=>
返回表示比较值的数字。如果第一个对象的值大于第二个对象,<=>
将返回+1
。如果它的值较小,则返回-1
。如果两者具有相同的值,则返回0
。
对象的“值”可以定义为几乎任何东西。但是,对于String
,<=>
会检查两个参数的lexicographic ordering。
因此:
"abc" == "abc" # true
("abc" <=> "abc") == 0 # true
答案 3 :(得分:-1)
此运算符有时称为“signum”函数。它提供了最简洁的自定义排序顺序的方法。例如:
require "ostruct"
# Fake "rows" with OpenStructs
my_data = [
OpenStruct.new({ :name => "Ben", :age => 50 }),
OpenStruct.new({ :name => "Abe", :age => 50 }),
OpenStruct.new({ :name => "Cab", :age => 51 })
]
# Sort by age descending, then name ascending
puts my_data.sort { |a, b| 2 * (b.age <=> a.age) + (a.name <=> b.name) }
这是有效的,因为<=>
的值始终为-1,0或1.我不知道更有效的方法来进行通用排序。
答案 4 :(得分:-1)
{J} {}},<
,==
和>
之间存在冗余,这是正确的。实际上,当定义<=>
,<
,==
时,会自动定义>
。