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

标签 ruby

在下面的代码中,arr 表示一个二维数组,例如[[1,2],[4,5]]。它计算子数组元素的总和。一个子数组只能有一个元素,在这种情况下,总和就是那个元素。

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

为什么代码必须是|(a, b)|而不是|a,b|(a,b) 在 Ruby 中是什么意思?

最佳答案

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

也可以改写如下代码,子数组没有元素个数限制:

 arr.map { |a| a.inject{ |sum,x| sum + x } }

甚至:

arr.map { |a| a.inject(:+) }

关于ruby - 为什么我不能使用 |a,b|而不是 |(a,b)|在 arr.map { |(a, b)| !b.nil? ?一个 + b : a }?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32345067/

相关文章:

ruby-on-rails - Windows 上的 Rails - 安装问题

Ruby:对象深度复制

ruby - 有没有办法覆盖创建方法以及构建工厂女孩?

ruby-on-rails - Rails Assets 未在生产中预编译

ruby-on-rails - ruby rails : Unit Testing non activerecord models and still load fixtures

ruby - 资源编译在服务器环境中崩溃,出现 : "NoMethodError: undefined method ` [ ]' for nil:NilClass"

ruby - gem 安装错误 : timed out https://api. ruby​​gems.org/

ruby-on-rails - neo4j.rb 检查两个节点之间是否已经存在关系

ruby - 如何在二叉树上的 ruby​​ 中实现就地映射方法(映射!)?

ruby - sqlite3 gem的#execute和#query方法的返回值