The spaceship operator helps compare two values easily by telling if one is smaller, equal, or bigger than the other.
Spaceship operator (<=>) in Ruby
a <=> b
Returns -1 if a is less than b.
Returns 0 if a equals b.
Returns 1 if a is greater than b.
Returns nil if the values cannot be compared.
5 <=> 10 # returns -1
10 <=> 10 # returns 0
15 <=> 10 # returns 1
"apple" <=> "banana" # returns -1
This program compares numbers and words using the spaceship operator and prints the results.
puts 3 <=> 7 puts 7 <=> 7 puts 9 <=> 7 puts "cat" <=> "dog" puts "dog" <=> "cat"
The spaceship operator is very useful for sorting because it gives a clear order between two items.
If you compare things that cannot be ordered, like a number and a string, it returns nil.
The spaceship operator compares two values and returns -1, 0, or 1.
It helps decide if one value is smaller, equal, or bigger than another.
It is often used in sorting and custom comparisons.
Practice
What does the Ruby spaceship operator <=> return when comparing two values?
Solution
Step 1: Understand the spaceship operator purpose
The spaceship operator compares two values and returns an integer indicating their order.Step 2: Recall the return values
It returns -1 if the left value is smaller, 0 if both are equal, and 1 if the left is bigger.Final Answer:
-1 if left is smaller, 0 if equal, 1 if left is bigger -> Option BQuick Check:
Spaceship operator returns -1, 0, or 1 [OK]
- Confusing return values with booleans
- Thinking it returns a sum or boolean
- Mixing up which side is compared
Which of the following is the correct syntax to compare a and b using the spaceship operator in Ruby?
?Solution
Step 1: Identify the spaceship operator syntax
The spaceship operator is written as<=>between two values.Step 2: Match the correct syntax
Onlya <=> buses the correct operator symbol and order.Final Answer:
a <=> b -> Option DQuick Check:
Correct operator is<=>[OK]
<=> exactly between variables [OK]- Using => which is a hash rocket
- Using <= or =< which are comparison operators
- Swapping operator symbols incorrectly
What is the output of the following Ruby code?
puts 5 <=> 10
puts 10 <=> 10
puts 15 <=> 10Solution
Step 1: Evaluate each comparison
5 <=> 10 returns -1 because 5 is smaller than 10.
10 <=> 10 returns 0 because both are equal.
15 <=> 10 returns 1 because 15 is bigger than 10.Step 2: Confirm output lines
Eachputsprints the result on a new line, so output is three lines: -1, 0, 1.Final Answer:
-1 0 1 -> Option CQuick Check:
5 < 10 = -1, equal = 0, 15 > 10 = 1 [OK]
- Mixing up the order of output
- Expecting boolean true/false instead of -1,0,1
- Confusing <=> with < or > operators
Identify the error in this Ruby code snippet using the spaceship operator:
result = 7 <=>
3
puts resultSolution
Step 1: Check operator usage across lines
The spaceship operator<=>must be on the same line between operands; splitting it causes syntax error.Step 2: Understand Ruby syntax rules
Ruby does not allow breaking operators across lines without proper continuation, so this code raises a syntax error.Final Answer:
Syntax error due to line break in operator -> Option AQuick Check:
Operators must not be split across lines [OK]
<=> on one line between values [OK]- Splitting operator across lines
- Assuming nil return for invalid syntax
- Confusing runtime errors with syntax errors
Given the array arr = [3, 1, 4, 1, 5], which code snippet correctly sorts the array in descending order using the spaceship operator?
Solution
Step 1: Understand sorting with spaceship operator
The block compares two elementsaandb. To sort descending, comparebtoa.Step 2: Analyze each option
arr.sort { |a, b| a <=> b } sorts ascending (a <=> b).
arr.sort { |a, b| b <=> a } sorts descending (b <=> a).
arr.sort_by { |x| x <=> 0 } misusessort_bywith spaceship operator.
arr.sort { |a, b| a == b } returns boolean, invalid for sorting.Final Answer:
arr.sort { |a, b| b <=> a } -> Option AQuick Check:
Reverse order uses b <=> a [OK]
<=> [OK]- Using a <=> b for descending sort
- Misusing sort_by with spaceship operator
- Returning boolean instead of integer in block
Ready to prove it?
Pass the test and this pattern moves unknown
