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

nol*_*man 19 ruby ruby-block

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

if block_given?
    res = yield(array[i], array[i+1])
  else
    res = array[i] - array[i+1]
  end
Run Code Online (Sandbox Code Playgroud)

然而,RuboCop正在给我一个警告,我不明白这一点if block_given?:

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

还有其他更多的rubyist方式吗?

谢谢

眠りネ*_*ネロク 32

警告告诉你要做的是:

res = if block_given?
        yield(array[i], array[i+1])
      else
        array[i] - array[i+1]
      end
Run Code Online (Sandbox Code Playgroud)

也就是说,只有一个赋值而不是两个(甚至更多).

  • noloman,是的,我认为这是更可取的。[Ruby样式指南](https://github.com/bbatsov/ruby-style-guide)赞成使用ternery表达式,前提是(如此处所示)每个分支只有一个表达式,而这些表达式本身不是terneries。我同意。 (3认同)
  • 也许`res = block_given?? yield(array[i], array[i + 1]) : array[i] - array[i + 1]` 也有效吗? (2认同)