【问题标题】:lint error Useless assignment to variablelint error 无用的变量赋值
【发布时间】:2017-04-21 19:11:08
【问题描述】:

我在模型中有这个 if 条件

  if column_value = 'Y'
    Abc.new('test', latest.column_1, latest.column_2, latest.column_3)
  else
    Abc.new('test2', latest.column_1, latest.column_2, latest.column_3)
  end
end

column_value 不是变量。我正在使用活动记录中存在的列值。 为什么我收到 lint 错误 Useless assignment to variable - column

编辑: 尝试了 column_value == 'Y' 但随后出现错误 undefined variable or method column_value 也试过 self.column_value 得到 lint 错误redundant self detected

【问题讨论】:

  • = 是赋值,并且由于 'Y' 为真, if 块将始终运行,而 else 块将永远不会运行。 == 是一个比较运算符,将是有条件的。基本上你说的是if true # do something而不是if something == true #do something
  • 尝试了 column == 'Y' 但随后得到错误未定义的局部变量或方法列。奇怪的是,当我有 = 它成功运行但 lint 抛出错误
  • 您可以使用column_value = 'Y',但是,如前所述,您的else 永远不会运行。而且,即使您确实使用了该逻辑,它也会让其他必须在以后维护代码的人感到非常困惑,所以不要这样做。你没有给我们足够的信息来解决这个问题。阅读“minimal reproducible example”。
  • 你确定你有一个检索“column_value”的方法,因为你的代码很模糊,几乎不可能从这里得到帮助。此外,并非所有的 linting 都可以节省您尝试使用 RuboCop 编写 rspecs 规范(显然我的块太长:))。 根据您在下面的评论,此示例不正确,因为您没有解释这是在班级级别,或者答案应该是(您不能这样做并且您正在使用作业
  • 修复了它。请在下面查看我的答案。抱歉没有提供所有细节

标签: ruby ruby-on-rails-4 if-statement


【解决方案1】:

if 子句中使用== 运算符而不是= 赋值运算符:

if self.column_name == 'Y'
# do this
else
# do that
end

【讨论】:

  • 尝试过,但随后得到错误未定义的局部变量或方法列。奇怪的是,当我有 = 它成功运行但 lint 抛出错误
  • 尝试使用 self.column_name 而不是 column
  • 试过了。检测到多余的 lint 错误。如果条件在类方法中(self.class_method)
  • @User7354632781 您无法从类的上下文中访问列值,就像您无法从建筑物的屋顶访问房间一样。您必须在建筑物内才能访问房间,并且您必须在实例内才能访问列值
【解决方案2】:

用三元运算符修复,需要 latest.column_value

Abc.new(latest.column_value == 'Y' ? 'test' : 'test2', latest.column_1, latest.column_2, latest.column_3)

【讨论】:

    猜你喜欢
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2016-09-21
    • 2020-02-21
    • 1970-01-01
    相关资源
    最近更新 更多