为什么我不能使用| a,b | 而不是|(a,b)| 在arr.map {|(a,b)|中 !b.nil??a + b:a}?

evi*_*ing 1 ruby

在下面的代码中,arr意味着是一个二维数组,例如[[1,2],[4,5]].它计算子数组元素的总和.子数组只能有一个元素,在这种情况下,sum只是一个元素.

def compute(arr)
  return nil unless arr
  arr.map { |(a, b)| !b.nil? ? a + b : a }
end
Run Code Online (Sandbox Code Playgroud)

为什么代码必须|(a, b)|代替|a,b|(a,b)Ruby 中的意思是什么?

xda*_*azz 5

你也可以使用|a,b|它,它没什么不同|(a,b)|.

您也可以重写下面的代码,它没有子数组的元素数限制:

 arr.map { |a| a.inject{ |sum,x| sum + x } }
Run Code Online (Sandbox Code Playgroud)

甚至:

arr.map { |a| a.inject(:+) }
Run Code Online (Sandbox Code Playgroud)