当你在你自己的类中定义飞船方法并包含Comparable module时,它是很有用的。你的类将免费获得>, < , >=, <=, ==, and between?方法。
class Card
include Comparable
attr_reader :value
def initialize(value)
@value = value
end
def <=> (other) #1 if self>other; 0 if self==other; -1 if self<other
self.value <=> other.value
end
end
a = Card.new(7)
b = Card.new(10)
c = Card.new(8)
puts a > b # false
puts c.between?(a,b) # true
# Array#sort uses <=> :
p [a,b,c].sort # [#<Card:0x0000000242d298 @value=7>, #<Card:0x0000000242d248 @value=8>, #<Card:0x0000000242d270 @value=10>]
6条答案
按热度按时间4nkexdtk1#
spaceship operator将返回
1
、0
或−1
,具体取决于左侧参数相对于右侧参数的值。它通常用于对数据进行排序。
它也被称为 * 三向比较运算符 *。Perl可能是第一个使用它的语言。其他一些支持它的语言有Apache Groovy、PHP 7+和C++20。
jhiyze9q2#
当你在你自己的类中定义飞船方法并包含Comparable module时,它是很有用的。你的类将免费获得
>, < , >=, <=, ==, and between?
方法。z4bn682m3#
这是一个通用的比较运算符。它返回-1、0或+1,这取决于它的接收方是小于、等于还是大于它的参数。
balp4ylt4#
我将用一个简单例子来解释
[1,3,2] <=> [2,2,2]
Ruby将从左手开始比较两个数组的每个元素。左侧数组的
1
小于右侧数组的2
。因此左侧数组小于右侧数组。输出将为-1
。[2,3,2] <=> [2,2,2]
如上所述,它将首先比较相等的第一元素,然后比较第二元素,在这种情况下,左阵列的第二元素较大,因此输出为
1
。42fyovps5#
由于此运算符将比较简化为整数表达式,因此它提供了最通用的方式来基于多个列/属性进行升序或降序排序。
例如,如果我有一个对象数组,我可以这样做:
这种基本模式可以推广为按任意数量的列排序,每个列可以按升序/降序进行任意排列。
bsxbgnwa6#
什么是
<=>
(“太空船”操作员)根据RFC that introduced the operator,$a
<=>
$B第一个
范例:
详细信息: