ruby-on-rails - Ruby 中意外的大小写行为

标签 ruby-on-rails ruby

我在一段非常简单的代码(如我所想)中得到了一个错误的值:

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评估为 falseorg === false显然不是真的。所有其他情况也是如此,它们要么是真的,要么是假的。这意味着它们都不匹配。

如果您不指定表达式,则 case表现得像个花哨的if .

开关 case orgcase它有效。您还可以切换到范围:

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/

相关文章:

ruby-on-rails - Ruby number_to_currency 显示一个完全错误的数字!

mysql - 如何从我的 Rails 应用程序查询数据库?

ruby - 为什么 Fixnum#size 等于 8?

ruby-on-rails - 如何在 Ruby 中对世界杯小组赛表进行排序

ruby - proc 数组或 lambda 数组

ruby - 将 SHA1 密码转换为其二进制形式

c# - 为什么 Ruby 套接字服务器可以与其他 Ruby 套接字客户端配合使用,但不能与 C# 套接字客户端配合使用?

ruby-on-rails - railis 在 Ubuntu 上的新失败

ruby-on-rails - 如果不是管理员,用户可以更新自己吗?

css - 没有数据时删除下拉内容