使 case/switch 返回值的快捷方式

2024-05-23

我很确定我看到有人做了像下面的代码这样的快捷技术(这不起作用)

return case guess
  when guess > @answer then :high
  when guess < @answer then :low
  else :correct
end

有谁知道我指的技巧吗?


A case语句确实返回一个值,您只需使用它的正确形式即可获得您期望的值。

有两种形式case在红宝石中。第一个看起来像这样:

case expr
when expr1 then ...
when expr2 then ...
else ...
end

这将比较expr与每个when表达使用===(顺便说一句,这是一个三重),它将执行第一个then where ===给出一个真实的值。例如:

case obj
when Array then do_array_things_to(obj)
when Hash  then do_hash_things_to(obj)
else raise 'nonsense!'
end

是相同的:

if(Array === obj)
  do_array_things_to(obj)
elsif(Hash === obj)
  do_hash_things_to(obj)
else
  raise 'nonsense!'
end

另一种形式是case只是一堆布尔条件:

case
when expr1 then ...
when expr2 then ...
else ...
end

例如:

case
when guess > @answer then :high
when guess < @answer then :low
else :correct
end

是相同的:

if(guess > @answer)
  :high
elsif(guess < @answer)
  :low
else
  :correct
end

当您认为自己正在使用第二种形式时,您正在使用第一种形式,因此您最终会做一些奇怪的(但语法上有效的)事情,例如:

(guess > @answer) === guess
(guess < @answer) === guess

在任一情况下,case是一个表达式并返回匹配分支返回的任何内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 case/switch 返回值的快捷方式 的相关文章

  • 设计不能很好地处理 RoR3 应用程序上的多个子域

    我看到了很多关于这个主题的问题 但其中很多都有相互矛盾的信息 并且由于某种原因它对我不起作用 I have 顶级域名 即 lvh me 开发 每个用户都有子域 即 userdomain lvh me 登录表单位于顶级域 lvh me I w
  • MacOS 每秒唤醒次数错误

    构建 Rails 应用程序 ruby 2 4 0p0 Rails 5 1 4 并使用我的 Macbook Air MacOS High Sierra 10 13 2 进行本地测试 我不断遇到此问题 过去 241 秒内有 45001 次唤醒
  • 分别对用户和管理员进行身份验证

    class ApplicationController lt ActionController Base protect from forgery skip before filter authenticate user only gt w
  • Ruby 电子表格 gem,如何居中对齐数字

    我在用着http spreadsheet rubyforge org http spreadsheet rubyforge org生成电子表格 但我遇到了一些问题 我正在打开现有工作簿并向其中添加数据 我已经设法在某种程度上使数字格式正常工
  • Rails 返回 JSON 序列化属性 with_in Different_access

    我以前有 serialize params JSON 但这会返回 JSON 并将哈希键符号转换为字符串 我想使用符号引用哈希 这在使用哈希时最常见 我向它提供符号 Rails 返回字符串 为了避免这种情况 我创建了自己的 getter se
  • 测试 Ruby 字符串或符号的字符串相等(而不是对象相等)的最简洁方法?

    我总是这样做来测试 Ruby 中的字符串相等性 if mystring eql yourstring puts same else puts different end 这是在不测试对象相等性的情况下执行此操作的正确方法吗 我正在寻找最简洁
  • Rails Partial (Rails 3, HAML) 任意慢

    我使用的是 Rails 3 0 1 HAML 0 3 22 和 Mongrel 1 1 5 MongoMapper 不是 AR 我正在渲染一个列表 每个列表项都是它自己的部分 每次页面渲染其中一个列表项部分时 渲染时间都会延长近 100 倍
  • 可以在哈希每个循环中访问索引吗?

    我可能遗漏了一些明显的东西 但是有没有办法访问哈希每个循环内迭代的索引 计数 hash three gt one four gt two one gt three hash each key value any way to know wh
  • Ruby 的 OpenSSL::Random 种子是否足够?

    我对 Ruby 知之甚少 所以如果答案很明显 请原谅我 我注意到在http www ruby doc org stdlib 1 9 3 libdoc securerandom rdoc SecureRandom html http www
  • 时间:2019-03-17 标签:c#AlphaTelephoneNumberTranslator

    我有一个家庭作业 该程序将接受格式类似于 555 GET FOOD 的任何电话号码 任务是将字母映射到数字 并将数字翻译成其对应的数字 例如 A B C 2 D E F 3 ETC 目前我们还没有讨论类或创建地图 因此这些不是可行的解决方案
  • BigDecimal 无法强制转换为 BigDecimal

    这应该很简单 但它却爆炸了 有任何想法吗 d BigDecimal new 2 0 YAML load a gt d to yaml TypeError BigDecimal can t be coerced into BigDecimal
  • Rails:渲染不起作用,仍然出现“模板丢失”

    我目前正在学习 Rails 指南 我完成了这些步骤 但仍然遇到错误 我的 Ruby 版本是ruby 2 1 1p76Rails 版本是4 0 4 按照指南的指示 我创建了一个Article Controller class Articles
  • 在 ruby​​ 中读/写受密码保护和加密的文件

    我想加密一个 ruby 程序将从中加载数据的文件 此外 我需要程序在启动时提示输入密码 该密码将用于解密文件 换句话说 该文件需要加密地驻留在计算机上 只有拥有密码的用户才能运行该应用程序 我已经开始研究 openpgp 但据我了解 这仍然
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • 使用 YAML.load 解析 json 安全吗?

    我使用的是红宝石2 1 0 我有一个 json 文件 例如 测试 json item apple 1 banana 2 使用 YAML load 加载此文件是否安全 YAML load File read test json 我正在尝试加载
  • 如何在 JS Rails 响应中包含 HTML?

    我有一个响应 HTML 和 JS AJAX 查询的 FooController app controllers foo controller rb class FooController lt ApplicationController l
  • ruby 的 String .hash 方法如何工作?

    我只是红宝石的新手 我见过一个字符串方法 String hash 例如 在irb 我试过了 gt gt mgpyone hash returns gt 144611910 这个方法是如何工作的 The hash方法是为所有对象定义的 看文档
  • 如何在 gem 的示例脚本中使用 pry-byebug ?

    我正在制作我的第一个 gem 它不是 Rails 应用程序 而是一个带有一些 AI 的 tic tac toe 库 这样我就可以与一个永远不会输的计算机对手比赛 并在可能的情况下强行获胜 现在我正在尝试调试人工智能中的攻击策略 但我似乎无法
  • 什么是 - 获取的是一个目录 - 错误消息

    我收到这个奇怪的错误 Users gideon Documents ca ruby rubytactoe lib player rb 13 in gets Is a directory spec Errno EISDIR 玩家规格 rb r
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered

随机推荐

  • Mcrt1.o和Scrt1.o有什么用?

    我坚持使用以下两个文件 即 Mcrt1 o 和 Scrt1 o 谁能帮我知道这两个文件的用途 如何使用它 我们以 gcrt1 o 为例 在使用 pg 选项编译进行性能测试时非常有用 谢谢 表格的文件 crt o总是 C 运行时启动代码 大部
  • 如何提高洪水填充例程的性能?

    我正在我的应用程序中实现四路洪水填充 伪代码如下 Flood fill node target color replacement color 1 If the color of node is not equal to target co
  • 在活动中嵌入一个大小的ListView - android

    我正在看这个教程 http developer android com resources tutorials views hello listview html http developer android com resources t
  • 如何在运行时更改按钮的颜色? [复制]

    这个问题在这里已经有答案了 button1 Button root text A1 width 8 grid row 0 column 0 button2 Button root text A2 width 8 grid row 0 col
  • 在生产代码/服务器上运行测试

    我在单元测试 自动化测试方面相对缺乏经验 所以如果这个问题没有任何意义 请原谅 我当前正在处理的代码库耦合如此紧密 以至于我需要重构大部分代码才能对其运行单元测试 所以我阅读了一些帖子并发现了 Selenium 我认为它确实是一个很酷的程序
  • 如何引用 pinescript 中临时变量中存储的先前入场价格?

    我有一些基本的 MA 交叉策略指标 我想实施更好的策略 仅当价格高于之前购买时才出售 但我不确定如何在 PINE 语法中执行此操作 有什么想法吗 这是简单的代码 工作正常 它打开 LONG 或关闭 LONG 取决于交叉 MA Strateg
  • 按值对对象 javascript 数组进行排序[重复]

    这个问题在这里已经有答案了 我有以下数组 data date entered 2021 02 18 order 1 data date entered 2021 02 22 order 2 data date entered 2021 02
  • 将对话框项分组到单个“组”(Visual Studio)

    我想创建一个对话框窗口来更改应用程序的设置 下面是 Adob e Reader 的屏幕截图 使用 Spy 后 我猜想 在右侧 所有控件 按钮 组合框 等 都属于 GroupBox 对于左侧TreeView控件中的每个类别 都有一个相应的Gr
  • GitHub 操作 setup-r-dependency 失败,说明没有名为“digest”的包

    我一直在尝试设置一些 GitHub 操作来自动检查我的 R 包并运行测试覆盖率 我目前正在使用 setup r dependency v2 操作来安装依赖项 但无法安装包 digest 返回以下错误 Error Error
  • google-oauthlib-tool 不询问授权码,并且在 rpi-4B 上没有“--headless”选项

    我正在尝试嵌入谷歌助手SDK https developers google com assistant sdk在我的树莓派上通过以下方式本指南由 Google 提供 https developers google com assistan
  • 时间:2019-03-17 标签:c#datatypes->oracledatatypes

    我喜欢在 Oracle 数据库中保存不同的 C 数据类型 int decimal double string Guid 有谁有一个表显示要使用哪些 Oracle 数据类型 我找到了一些表格 显示了哪些 c 数据类型可用于不同的 oracle
  • 如何实现DataGridView的自动排序?

    我以编程方式将列添加到 DataGridView 然后绑定到列表 默认情况下 列的排序模式为自动 但是当我运行我的应用程序时 单击标题没有任何反应 向上 向下箭头未显示 从看MSDN来看 关于自动排序并没有太多说的 他们更详细地介绍了程序化
  • 使用不同的背景颜色保存 MATLAB 图窗

    我想打印一个带有深色背景和白色标签的 MATLAB 图 如果我使用print or saveas命令我不知何故失去了颜色 绘图符号再次变暗 背景变为白色 points rand 100 3 plot3 points 1 points 2 p
  • ATL 转换规则不匹配嵌套的 BPMN2 元素

    我正在编写从 BPMN2 到另一个模型的 ATL 翻译 问题是代码没有检测到任何嵌套元素 我已在此处发布了 atl 代码和我的输入 https github com behnaaz BPMN2ATL git https github com
  • Amazon S3 - 一个对象的多个键

    我有一个 S3 存储桶 其中包含超过 1 亿个对象 每个对象像往常一样都有一个唯一的密钥 我想知道是否有办法为其中一些对象分配另一个键 像这样的东西 键1 gt 对象1 键2 gt 对象2 Key3 gt Object2 我想添加这个 我在
  • 跳过 -with- 块的执行

    我正在定义一个上下文管理器类 如果在实例化期间满足某些条件 我希望能够跳过代码块而不引发异常 例如 class My Context object def init self mode 0 if mode 0 proceed as norm
  • 如何 ping FastCGI 服务器?

    除了建立 TCP 连接之外 如何检查 FastCGI 服务器是否处于活动状态并正常运行 我有许多远程 独立的 FastCGI 服务器 我想监视 FastCGI 服务器本身以确保其活动 仅仅向 Web 服务器发出请求是不够的 因为它会自动绕过
  • 实体框架 SQLite 错误 1:“没有这样的表:__EFMigrationsHistory”

    我在 Windows 和 Linux 上运行 EF Core 并且在两者上都遇到相同的问题 public string DbPath get string DbPath Environment GetFolderPath Environme
  • WinDbg从符号中获取所有函数的地址

    执行命令x ShittyProject 我得到这样的输出
  • 使 case/switch 返回值的快捷方式

    我很确定我看到有人做了像下面的代码这样的快捷技术 这不起作用 return case guess when guess gt answer then high when guess lt answer then low else corre