- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对以下 Ruby 行为感到困惑:
result = [1,2,3].each_with_object([]) do |elem, memo|
memo << [elem]
end
puts result.to_s
# => [[1], [2], [3]]
上面的代码按照我期望的方式工作。但是,下面的代码似乎只是删除了我试图附加到数组的数字。
result = [1,2,3].each_with_object([]) do |elem, memo|
memo += [elem]
end
puts result.to_s
# => []
谁能向我解释这里发生了什么,以及我应该如何在上述上下文中将 +=
运算符与 each_with_object
一起使用?
最佳答案
memo 是局部变量,指向一个数组对象。这些循环变量在每次迭代时设置。
在第一个示例中,您更改了这个数组对象。
在第二个示例中,您使用新数组覆盖局部变量。因为 memo += [elem]
只是 memo = momo + [elem]
的简写旧数组保持为空。
很多时候你最好使用inject
而不是each_with_object
。使用 inject,新的 memo 变量设置为 block 的结果,因此您可以使用非破坏性函数。
[1,2,3].inject([]) do |memo, elem|
memo + [elem]
end
关于arrays - 为什么 Ruby 的 each_with_object 会将附加有 += 运算符的数据删除到数组备忘录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35972499/
我想用 index 做 a.each_with_object,比这更好: a = %w[a b c] a.each.with_index.each_with_object({}) { |arr, ha
我正在尝试弄清楚应该如何使用 each_with_object。 我有一个不起作用的求和示例: > (1..3).each_with_object(0) {|i,sum| sum+=i} => 0 我
下面,我们得到一个名为 win_lose 的数组。我们应该创建一个看起来像下面的哈希的哈希。我最初的想法是使用 .count 做一些事情,但在尝试了答案之后,.each_with_object 的效果
根据 APIdock ,Ruby 方法 Enumerable#each_with_object 已弃用。 除非它是错误的(说“在最新稳定版本的 Rails 上弃用”让我怀疑可能是 Rails 的猴子补
这个问题在这里已经有了答案: Strange, unexpected behavior (disappearing/changing values) when using Hash default
我知道 each_with_object 不适用于像 integer 这样的不可变对象(immutable对象)。 例如 (1..3).each_with_object(0) {|i,sum| sum
我想在散列上使用 each_with_object 但不知道应该如何使用它。这是我所拥有的: hash = {key1: :value1, key2: :value2} hash.each_with_
我不得不更新一个数组,我使用了 +=和 <<在传递给 Array#each_with_object 的 block 内的不同代码运行中: 代码1 (1..5).each_with_object([])
为什么在 each_with_object 中使用 0 作为参数没有返回正确的值: [1,2,3].each_with_object(0) {|i,o| o += i } # => 0 但是使用空数组
我对以下 Ruby 行为感到困惑: result = [1,2,3].each_with_object([]) do |elem, memo| memo [[1], [2], [3]] 上面的代
文档说: enum#each_with_object :- Iterates the given block for each element with an arbitrary object, ob
我做了一些基准测试: require 'benchmark' words = File.open('/usr/share/dict/words', 'r') do |file| file.each
#each_with_object和 #inject都可以用来构建哈希。 例如: matrix = [['foo', 'bar'], ['cat', 'dog']] some_hash = matri
当我多年前开始编写 Ruby 时,我花了一段时间才理解 each 之间的区别。和 map .当我发现所有其他的时,情况只会变得更糟 Enumerable和 Array方法。 借助官方文档和many S
我们正在从 Ruby 1.9.3 升级到 Ruby 2,从 Rails 3.x 升级到 Rails4。我们正在使用设计进行身份验证。我们基于 Ryan Bates Railscasts 升级了 gem
我是一名优秀的程序员,十分优秀!