ruby – 什么是Ruby <=>(spaceship)操作符?

什么是Ruby <=>(spaceship)运营商?运营商是否通过其他语言实施?


Perl可能是第一个使用它的语言。Groovy是支持它的另一种语言。基本上,而不是返回1true)或0false取决于参数是否相等或不相等),飞船运算符将返回10或者−1取决于相对于右参数左边参数的值。

a <=> b :=
  if a < b then return -1
  if a = b then return  0
  if a > b then return  1
  if a and b are not comparable then return nil

这对排序数组很有用。


当您在自己的类中定义它并包含可比较模块时,飞船方法很有用。然后你的班级>, < , >=, <=, ==, 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>]

这是一个普通的比较运算符。它根据接收者是否小于,等于或大于它的参数返回-1,0或+1。

添加评论

友情链接:蝴蝶教程