ruby – every_with_object应该如何工作?
发布时间:2020-12-16 20:42:54 所属栏目:百科 来源:网络整理
导读:新的ruby,我试图找出如何使用every_with_object. 我试着用一个非常简单的数字,所以我写道: (1..3).each_with_object(0) {|i,sum| sum+=i}= 0 嘿,我会假设结果将是6!我的错误在哪里 解决方法 each_with_object在不可变对象(如整数)上不起作用. (1..3).each_
新的ruby,我试图找出如何使用every_with_object.
我试着用一个非常简单的数字,所以我写道: > (1..3).each_with_object(0) {|i,sum| sum+=i} => 0 嘿,我会假设结果将是6!我的错误在哪里 解决方法
each_with_object在不可变对象(如整数)上不起作用.
(1..3).each_with_object(0) {|i,sum| sum += i} #=> 0 这是因为each_with_object遍历一个集合,将每个元素和给定对象传递给块.它不会在每次迭代后更新对象的值并返回原始给定对象. 它将使用哈希,因为改变哈希键的值会自动更改原始对象. (1..3).each_with_object({:sum => 0}) {|i,hsh| hsh[:sum] += i} #=> {:sum => 6} 字符串对象是有趣的情况.它们是可变的,所以你可能会期待以下 ("a".."c").each_with_object("") {|i,str| str += i} # => "" 但它没有.这是因为str =“a”返回一个新对象,原始对象保持不变.但是,如果我们这样做 ("a".."c").each_with_object("") {|i,str| str << i} # => "abc" 它的作用是因为str < “a”修改原始对象. 有关更多信息,请参阅ruby docs for each_with_object 为了您的目的,请使用inject (1..3).inject(0) {|sum,i| sum += i} #=> 6 # or (1..3).inject(:+) #=> 6 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |