Ruby case / when vs if / elsif

时间:2014-02-13 17:37:16

标签: ruby

case / when语句提醒我Python中的try / catch语句,这些操作相当昂贵。这与Ruby case / when语句类似吗?除了if / elsif Ruby语句之外,它们有什么优势,除了可能更简洁之外?我何时才能使用其中一个?

2 个答案:

答案 0 :(得分:8)

case表达式根本不像try / catch块。 trycatch的Ruby等效项为beginrescue

通常,当您要为多个条件测试一个值时,将使用case表达式。例如:

case x
when String
  "You passed a string but X is supposed to be a number. What were you thinking?"
when 0
  "X is zero"
when 1..5
  "X is between 1 and 5"
else
  "X isn't a number we're interested in"
end

case表达式与许多其他语言(例如C,Java,JavaScript)中存在的switch语句正交,尽管Python不包含任何此类内容。与case的主要区别在于它是一个表达式而不是一个语句(因此它产生一个值)并且它使用===运算符进行相等,这允许我们表达有趣的事情,例如“这个值是一个字符串吗?它是0吗?是否在1..5范围内?“

答案 1 :(得分:3)

Ruby的begin/rescue/end更类似于Python的try/catch(假设Python的try / catch类似于Javascript,Java等)。在上面的两个代码中,代码运行,捕获错误并继续。

case/when与C switch类似,忽略了bjhaid提及的===运算符与if/elseif/end非常相似。您使用哪种方法取决于您,但当条件数量变长时使用case会有一些优势。没有人喜欢/if/elsif/elsif/elsif/elsif/elsif/end: - )

Ruby有一些其他神奇的东西涉及===运算符,可以使case很好,但我会把它留给文档,它比我能更好地解释它。