【问题标题】:Ruby: Use the return of the conditional for variable assignment and comparisonRuby:使用条件的返回进行变量赋值和比较
【发布时间】:2018-07-21 17:02:59
【问题描述】:

我有一个方法,为了检查它是否被传递了一个块,我做了以下事情:

if block_given?
    res = yield(array[i], array[i+1])
  else
    res = array[i] - array[i+1]
  end

但是 RuboCop 在if block_given? 行中给了我一个我不太明白的警告:

使用条件的返回进行变量赋值和比较

还有其他更多的 ruby​​ist 方法吗?

谢谢

【问题讨论】:

    标签: ruby ruby-block


    【解决方案1】:

    警告告诉你要做的是:

    res = if block_given?
            yield(array[i], array[i+1])
          else
            array[i] - array[i+1]
          end
    

    也就是说,只有一个作业而不是两个(甚至更多)。

    【讨论】:

    • 也许res = block_given? ? yield(array[i], array[i + 1]) : array[i] - array[i + 1] 也有效?
    • 当然,但是这个似乎更具可读性。特别是如果有多个分支(考虑嵌套? :)。
    • 另外,对齐对于 Rubocop 很重要。
    • noloman,是的,我认为这更可取。 Ruby Style Guide 支持使用三元表达式,前提是(如这里)每个分支只有一个表达式,并且这些表达式本身不是三元表达式。我同意。
    • 请注意 Rubocop 缩进规则。根据您的设置,else 和 end 必须与 res 对齐,而不是 if
    猜你喜欢
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2013-01-18
    • 2013-02-09
    相关资源
    最近更新 更多