rails - ruby logical operator




O que é o operador Ruby<=>(nave espacial)? (4)

O que é <=> (o operador 'Spaceship')

De acordo com o RFC que introduziu o operador , $ a <=> $ b

 -  0 if $a == $b
 - -1 if $a < $b
 -  1 if $a > $b
 - Return 0 if values on either side are equal
 - Return 1 if value on the left is greater
 - Return -1 if the value on the right is greater

Exemplo:

//Comparing Integers

echo 1 <=> 1; //ouputs 0
echo 3 <=> 4; //outputs -1
echo 4 <=> 3; //outputs 1

//String Comparison

echo "x" <=> "x"; // 0
echo "x" <=> "y"; //-1
echo "y" <=> "x"; //1

MAIS:

// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1

echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1

// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1

// Objects
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 0

O que é o operador Ruby <=> (nave espacial)? O operador é implementado por outros idiomas?


É um operador de comparação geral. Ele retorna um -1, 0 ou +1, dependendo de seu receptor ser menor, igual ou maior que seu argumento.


O método da espaçonave é útil quando você o define em sua própria classe e inclui o módulo Comparável . Sua classe então recebe o >, < , >=, <=, ==, and between? métodos de graça.

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>]

Perl foi provavelmente a primeira língua a usá-lo. Groovy é outra linguagem que suporta isso. Basicamente, em vez de retornar 1 ( true ) ou 0 ( false ), dependendo de os argumentos serem iguais ou desiguais, o operador da espaçonave retornará 1 , 0 ou −1 dependendo do valor do argumento esquerdo relativo ao argumento correto.

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

É útil para classificar uma matriz.





spaceship-operator