用 Ruby 編寫 switch 語句
Nurudeen Ibrahim
2023年1月30日
與 if
語句的工作方式類似,switch
語句允許我們根據某些特定條件控制程式碼的執行。本教程將介紹如何在 Ruby 中使用 switch
語句。
下面是 Ruby 中 switch
語句的語法。
case argument
when condition
# do something
else
# do something else if nothing else meets the condition
end
我們將研究一些常見的基本使用方法,然後介紹一些不太常見的複雜示例。
示例程式碼:
def continent_identifier(country)
case country
when "Nigeria"
puts "Africa"
when "Netherlands"
puts "Europe"
when "India"
puts "Asia"
else
puts "I don't know"
end
end
continent_identifier("India")
continent_identifier("Netherlands")
continent_identifier("Germany")
輸出:
Asia
Europe
I don't know
上面是一個使用 switch
語句來識別一個國家的大陸的方法的基本示例。看上面的例子,以下是值得注意的。
- 與大多數其他程式語言中的
switch
語句不同,Ruby 的switch
語句不需要在每個when
的末尾使用break
。 - Ruby 的
switch
語句允許我們為每個when
指定多個值,因此如果我們的變數匹配任何值,我們就可以返回結果。一個例子如下所示。
示例程式碼:
def continent_identifier(country)
case country
when "Nigeria"
puts "Africa"
when "Netherlands", "Germany"
puts "Europe"
when "India"
puts "Asia"
else
puts "I don't know"
end
end
continent_identifier("India")
continent_identifier("Netherlands")
continent_identifier("Germany")
輸出:
Asia
Europe
Europe
Ruby 的 switch
語句在底層使用 ===
運算子來比較 case
變數和提供的值,即 value === argument
。因此,Ruby switch
允許我們進行更巧妙的比較。
在 Ruby switch
中匹配 Ranges
在此示例中,我們檢查提供的 case
變數是否包含在指定的任何 Ranges 中。
示例程式碼:
def check_number(n)
case n
when 1..5
puts "Falls between 1 & 5"
when 6..10
puts "Falls between 6 & 10"
end
end
check_number(3)
check_number(7)
輸出:
Falls between 1 & 5
Falls between 6 & 10
在 Ruby switch
中匹配 Regex
我們還可以將正規表示式與 case
變數進行匹配,如下面的示例所示。
示例程式碼:
def month_indentifier(month)
case month
when /ber$/
puts "ends with 'ber'"
when /ary$/
puts "ends with 'ary'"
end
end
month_indentifier("February")
month_indentifier("November")
輸出:
ends with 'ary'
ends with 'ber'
在 Ruby switch
中匹配 Proc
Ruby Proc
封裝了可以儲存在變數中或傳遞的程式碼塊。你可以檢視此處以獲取有關 Ruby Proc
的更多說明。以下示例顯示瞭如何在 switch
語句中使用 Ruby Proc
。
示例程式碼:
def check_number(number)
case number
when -> (n) { n.even? }
puts "It's even"
when -> (n) { n.odd? }
puts "It's odd"
end
end
check_number(3)
check_number(6)
輸出:
It's odd
It's even