当前位置: 首页 > 知识库问答 >
问题:

在每个“何时”块中具有多个值的 case 语句

扶杜吟
2023-03-14

我能描述我正在寻找的最佳方式是向您展示我迄今为止尝试过的失败代码:

case car
  when ['honda', 'acura'].include?(car)
    # code
  when 'toyota' || 'lexus'
    # code
end

我有大约4到5种不同的情况,应该由大约50种不同的car值触发。有没有办法用case块来做到这一点,或者我应该尝试一个大规模的if块?

共有3个答案

商正浩
2023-03-14

记住switch/case (case/when等。)只是在比较价值观。我喜欢这种情况下简单的or字符串列表比较的官方答案,但是对于更奇特的条件/匹配逻辑,

case true
  when ['honda', 'acura'].include?(car)
    # do something
  when (condition1 && (condition2 || condition3))
    # do  something different
  else
    # do something else
end
柯树
2023-03-14

您可以利用ruby的“splat”或扁平化语法。

这使得子句过度生长 - 如果我理解正确,每个分支大约有10个值要测试 - 在我看来更具可读性。此外,还可以修改要在运行时测试的值。例如:

honda  = ['honda', 'acura', 'civic', 'element', 'fit', ...]
toyota = ['toyota', 'lexus', 'tercel', 'rx', 'yaris', ...]
...

if include_concept_cars
  honda += ['ev-ster', 'concept c', 'concept s', ...]
  ...
end

case car
when *toyota
  # Do something for Toyota cars
when *honda
  # Do something for Honda cars
...
end

另一种常见的方法是使用hash作为调度表,每个< code>car值都有键,值是封装了您希望执行的代码的一些可调用对象。

年嘉禧
2023-03-14

case 语句中, if 语句中,与 ||等效。

case car
   when 'toyota', 'lexus'
      # code
end

使用Ruby case语句可以做的其他一些事情

 类似资料:
  • 问题内容: 有没有一种方法可以使用IN子句进行CASE语句? 问题答案: 是的。您需要使用表达式的“搜索”形式而不是“简单”形式

  • 问题内容: 我想知道是否可以在case语句的then部分中指定多个值? 我已经在使用此代码的地方附加了一大段代码,以加入查询中的某些表中。我已在代码段中添加了评论。 问题答案: 这有点丑陋,但假设HeadQuarters不是十进制/数字类型,而只是整数值,

  • 问题内容: 我想在Java中实现具有多个值的哈希表,即 并且将返回2倍的值。 我怎样才能做到这一点? 问题答案: 您可以改用Multimap。它在列表中为一个键保留多个值。在commons- collection 和Guava中有实现。 这类似于使用值是列表的Hashmap,但是不必显式创建列表。 自己动手做的同一示例如下所示: 请注意,您可以将Multimap用作构建器,并对其调用asMap以返

  • 问题内容: 在使用MySQL的应用程序的Rails迁移中,我具有以下代码: 运行迁移时,出现以下错误: 为什么会出现此错误,我该如何解决? 问题答案: 这里的问题是,当同一执行块中有多个SQL命令时,Rails Mysql2数据库适配器就会阻塞。以下将正常运行: 如果您是将PostgreSQL与Rails一起使用,则此行为可能会使您感到困惑,因为Postgres适配器没有相同的限制。

  • 在短 我想在thymeleaf中有一个switch语句,逻辑一旦写入多个case语句。 详细地 我想在thymeleaf中实现这一点 我当前的胸腺叶代码失败并出现运行时错误 但是上面的代码错误地失败了 注意:我知道出现上述错误消息的原因。我所需要的只是知道一种方法来实现单输出的多情况切换

  • 我试图使用Laravel构建一个(稍微复杂的)订阅服务。 订阅类型为:20份早餐的早餐订阅,在注册后30天内使用。 例如,如果用户在4月1日注册早餐订阅,他可以选择任何20天,直到4月30日。 我制作了以下表格和相应的模型: 用户模型和表 订阅表和型号 订阅用户透视(?)带有软删除的表 我已经用belongsToMany关系更新了相应的模型 用户: 订阅模式 我需要帮助解决的问题1。数据库/模型结