Ruby <=>
(宇宙船)オペレーターとは?オペレーターは他の言語で実装されていますか?
6 に答える
三方比較演算子とも呼ばれます。Perl はおそらくそれを使用する最初の言語でした。それをサポートするその他の言語には、Apache Groovy、PHP 7+、および C++20 があります。
引数が等しいか等しくないかに応じて1
( true
) または0
( )を返す代わりに、宇宙船演算子は、右の引数に対する左の引数の値に応じて、、またはを返します。false
1
0
−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
です。