32

我有一个方法,为了检查它是否被传递了一个块,我执行以下操作:

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

然而,RuboCop 给了我一个警告,我并不真正理解这一if block_given?行:

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

还有其他更红宝石的方法吗?

谢谢

4

1 回答 1

63

警告告诉您要做的是:

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

也就是说,有一个分配而不是两个(甚至更多)。

于 2018-02-11T11:36:26.267 回答