Ruby <=>(宇宙船)オペレーターとは?オペレーターは他の言語で実装されていますか?
6 に答える
三方比較演算子とも呼ばれます。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
データの並べ替えによく使用されます。
宇宙船メソッドは、独自のクラスで定義し、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>]
一般的な比較演算子です。受信者が引数より小さいか、等しいか、または大きいかに応じて、-1、0、または +1 のいずれかを返します。
簡単な例で説明します
- [1,3,2] <=> [2,2,2]- Ruby は両方の配列の各要素を左側から比較し始めます。 - 1左の配列は右の配列よりも小さいです- 2。したがって、左の配列は右の配列よりも小さくなります。出力は になります- -1。
- [2,3,2] <=> [2,2,2]- 上記のように、最初に等しい最初の要素を比較し、次に 2 番目の要素を比較します。この場合、左の配列の 2 番目の要素が大きいため、出力は - 1です。