用 Ruby 編寫 switch 語句

Nurudeen Ibrahim 2023年1月30日
  1. 在 Ruby switch 中匹配 Ranges
  2. 在 Ruby switch 中匹配 Regex
  3. 在 Ruby switch 中匹配 Proc
用 Ruby 編寫 switch 語句

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