ruby - 为什么我不能用 ruby 做这个?

标签 ruby

  if !row[0].include? 'Changed database' || !row[0].starts_with? '---' || !row[0].include? "rows affected" || !row[0].nil? || !row[0] == ""

如果我这样做

if !row[0].include? 'Changed database'

它运行良好,但如果我执行多个条件,那么它会因这个错误而失败

SyntaxError: /Users/tamer/Sites/active/app/models/account.rb:42: syntax error, unexpected tSTRING_BEG, expecting kTHEN or ':' or '\n' or ';'
 ...ase' || !row[0].starts_with? '---' || !row[0].include? "rows...

最佳答案

有时解析器无法猜测您如何对参数进行分组。

在您的示例中,它正在解释 'Changed database' || !row[0].starts_with? 作为传递给 include? 的参数,当它遇到下一个标记时会窒息,'---' ,这就没有意义了。

加括号把歧义搞清楚就解决问题了,例如:

if !row[0].include?('Changed database') || !row[0].starts_with?('---') || !row[0].include?("rows affected") || !row[0].nil? || !row[0] == ""

如果您真的非常讨厌括号,您也可以改用 而不是 ||,后者的优先级较弱,稍后会应用,例如:

if !row[0].include? 'Changed database' or !row[0].starts_with? '---' or !row[0].include? "rows affected" or !row[0].nil? or !row[0] == ""

关于ruby - 为什么我不能用 ruby 做这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7326246/

相关文章:

ruby - 为什么 ruby​​ 循环是这样设计的?

ruby-on-rails - Rails 部分和 HAML

ruby-on-rails - ActiveRecord 连接 - 仅返回精确匹配

Ruby - 日期范围(从本月的第一天到下个月的第一天)

ruby-on-rails - 自动加载常量用户时检测到循环依赖

ruby - 在 gem 中打包预编译的二进制文件

Ruby:使用键/值数组设置新哈希

ruby-on-rails - 与 Thinking Sphinx 的深度关联和 Sphinx 索引?

ruby - 将 Ruby 对象序列化为 JSON 并返回?

ruby - 如何在没有 nilcheck 的情况下将 nil 值转换为 true