我在一段非常简单的代码(如我所想)中得到了一个错误的值:
org = 4
case org
when org <= 1
val = 'L'
when 2..3
val = 'M'
when org >= 4
val = 'H'
end
puts val
=> nil
请不要生气,我希望我错过了一些非常明显的东西,但我真的想不通。 谢谢。
最佳答案
这是典型的 Ruby 错误。 case
有两种被调用的方法,一种是你传递一个东西作为分支的基础,另一种是你不传递的东西。
如果您确实在 case
中指定了一个表达式语句然后评估所有其他条件并与 ===
进行比较.在这种情况下 org <= 1
评估为 false
和 org === false
显然不是真的。所有其他情况也是如此,它们要么是真的,要么是假的。这意味着它们都不匹配。
如果您不指定表达式,则 case
表现得像个花哨的if
.
开关 case org
至 case
它有效。您还可以切换到范围:
val =
case org
when 0..1
'L'
when 2..3
'M'
else
'H'
end
原始代码的执行方式就像是:
org = 4
if (org <= 1) === org
val = 'L'
elsif (2..3) === org
val = 'M'
elsif (org >= 4) === org
val = 'H'
end
这不是你想要的。
关于ruby-on-rails - Ruby 中意外的大小写行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45196405/