case
/ when
语句提醒我Python中的try
/ catch
语句,这些操作相当昂贵。这与Ruby case
/ when
语句类似吗?除了if
/ elsif
Ruby语句之外,它们有什么优势,除了可能更简洁之外?我何时才能使用其中一个?
答案 0 :(得分:8)
case
表达式根本不像try / catch块。 try
和catch
的Ruby等效项为begin
和rescue
。
通常,当您要为多个条件测试一个值时,将使用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
很好,但我会把它留给文档,它比我能更好地解释它。