288

Ruby <=>(宇宙船)オペレーターとは?オペレーターは他の言語で実装されていますか?

4

6 に答える 6

406

三方比較演算子とも呼ばれます。Perl はおそらくそれを使用する最初の言語でした。それをサポートするその他の言語には、Apache Groovy、PHP 7+、および C++20 があります。

引数が等しいか等しくないかに応じて1( true) または0( )を返す代わりに、宇宙船演算子は、右の引数に対する左の引数の値に応じて、、またはを返します。false10−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

データの並べ替えによく使用されます。

于 2009-05-06T01:30:27.810 に答える
77

宇宙船メソッドは、独自のクラスで定義し、Comparableモジュールを含める場合に役立ちます。その後、クラスは>, < , >=, <=, ==, 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>]
于 2013-01-11T16:24:24.627 に答える
20

一般的な比較演算子です。受信者が引数より小さいか、等しいか、または大きいかに応じて、-1、0、または +1 のいずれかを返します。

于 2009-05-06T01:31:08.230 に答える
20

簡単な例で説明します

  1. [1,3,2] <=> [2,2,2]

    Ruby は両方の配列の各要素を左側から比較し始めます。 1左の配列は右の配列よりも小さいです2。したがって、左の配列は右の配列よりも小さくなります。出力は になります-1

  2. [2,3,2] <=> [2,2,2]

    上記のように、最初に等しい最初の要素を比較し、次に 2 番目の要素を比較します。この場合、左の配列の 2 番目の要素が大きいため、出力は1です。

于 2013-01-11T14:02:41.057 に答える