Ruby在case语句中支持范围吗?

45

我想要做这件事:

case cost

    when cost between 1 and 3 then cost * 1.1
    when cost between 3 and 5 then cost * 1.2
else
    0
2个回答

69

是的,因为Range#===被定义为与include?相同,所以您可以在case语句中使用范围:

case cost
when 1..3 then cost * 1.1
when 3..5 then cost * 1.2

@Blankman 可以使用范围;0.01..0.99 是一个范围;所以,它可以工作。你应该编写(和阅读)代码;当你开始编写时,这两个问题--实际上只是同一问题的变体--将自己得到答案!(这是鼓励性的话语,而非贬低性的话语。) - Mike Linington
1
@sepp2k 如果成本等于3会发生什么?它会评估为第一种情况还是第二种情况? - Andrew
@Andrew The first. 当使用 .. 时,两个操作数的范围都是包含的(当使用 ... 时,右操作数是排除在外的),并且 case 会匹配第一个符合条件的模式。 - sepp2k

8

2
唉,现在谷歌搜索这个问题时会出现你的答案。我想这就是 Stack Overflow 的成功吧。 - Jaime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接