简单地说,为什么以下三条线的影响不同?

if @controller.controller_name == "projects" || @controller.controller_name == "parts"

if @controller.controller_name == ("projects" || "parts")

if @controller.controller_name == "projects" || "parts"

第一个表单给出了我想要的结果,但实际上,除了项目和部分之外,还有更多选项,因此使用该表单会创建一个冗长的语句.另外两个更紧凑,但不要给我相同的结果.

推荐答案

| |的确切语义是:

  • 如果第一个表达式不是nil或false,则返回它
  • 如果第一个表达式为nil或false,则返回第二个表达式

第一个表达式的结果是,如果@controller.controller_name == "projects",那么表达式短路并返回true.如果不是,则判断第二个表达式.第二个和第三个变量基本上是if @controller.controller_name == "projects",因为"projects" || "parts"等于"projects".你可以在irb中try :

>> "projects" || "parts"
=> "projects"

你想做的是

if ["projects", "parts"].include? @controller.controller_name

Ruby相关问答推荐

指南针手表:未定义的方法存在吗?对于文件:类

是否可以在 Ruby 中使用正则表达式匹配字符串\b(退格字符)?

在 ruby​​ 中提取文档中的主题标签和部分

Ruby 中的 Hash[key] 返回 nil 但 hash 没有 nil 值

有没有一种简单的方法可以在 Ruby 中获取图像尺寸?

这些 Ruby 命名空间约定之间有什么区别?

什么是 Sinatra/Rack 的非常简单的身份验证方案

无法在 Heroku 教程中使用 Python 启动工头

如何使用 if..else 块的结果分配变量?

全新安装 RVM 和 Ruby 2.1.1 - dyld 库/路径错误

你喜欢哪种风格的 Ruby 字符串引用?

理解|| Ruby 中 If 条件中的 OR 运算符

区分一个Ruby字符串或数组

将两个数组组合成哈希

如何在 Ruby 的 IRB 中启用自动完成

gem 安装失败并出现 openssl 失败

Ruby 疯狂:类与对象?

如何使用器重新安装 gem

Docker for Mac - mkmf.rb 找不到 ruby​​ 的头文件

查找两个数组的共同点