本文介绍了为什么Ruby注入方法不能总结没有初始值的字符串长度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
为什么下面的代码会报错?
Why the following code issues an error ?
['hello','stack','overflow'].inject{|memo,s|memo+s.length}
TypeError: can't convert Fixnum into String
from (irb):2:in `+'
from (irb):2:in `block in irb_binding'
from (irb):2:in `each'
from (irb):2:in `inject'
from (irb):2
如果传递了初始值,则工作正常:
If the initial value is passed, it works OK:
['hello','stack','overflow'].inject(0){|memo,s|memo+s.length}
=> 18
推荐答案
apidock :
如果没有明确指定memo的初始值,那么使用集合的第一个元素作为memo的初始值.
也就是说,没有初始值,您正在尝试执行 'hello' + 'stack'.length
That is, without an initial value, you're trying to do 'hello' + 'stack'.length
这篇关于为什么Ruby注入方法不能总结没有初始值的字符串长度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!