你是否应该传递块变量,即使它们没有被使用?

时间:2017-09-26 21:46:05

标签: ruby

使用HackerRank来提升我的技能,并看到了这段代码:

> h = {1 => 1, 2 => 4, 3 => 9, 4 => 16, 5 => 25}
 => {1 => 1, 2 => 4, 3 => 9, 4 => 16, 5 => 25}
> h.keep_if {|key, value| key % 2 == 0}

我看到即使没有使用value块变量,它仍然被传入。我知道它可以以任何方式工作(有或没有value),但它更正确传递你不打算使用的变量?或者传入即使未使用的变量,仍然应该传入,因为它被认为是更好的“形式”。

2 个答案:

答案 0 :(得分:5)

这可能是固执己见但我工作的项目中的规则是将其传递但只作为_value_,因为它在块的定义中传达变量不是被遗忘但不会被使用。

所以在你的例子中,这意味着

h.keep_if {|key, _| key % 2 == 0}

我们通常使用RuboCop::Cop::Lint::UnusedMethodArgument

通过rubocop强制执行

当重写方法并且覆盖实现不使用变量但需要列出它以匹配原始签名时,应用相同的规则。

答案 1 :(得分:-1)

我在IRB中测试后意识到,必须在某些方法中传递value变量才能使它们正常工作。

hash = {1=>3, 4=>7, 3=>2, 5=>6}
hash.find{|k|k.odd?} #without value block variable will return an error
hash.find{|k,v|k.odd?} #returns [1,3]