为什么Ruby注入方法无法在没有初始值的情况下总结字符串长度?

前端之家收集整理的这篇文章主要介绍了为什么Ruby注入方法无法在没有初始值的情况下总结字符串长度?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么以下代码发出错误
['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

如果传递初始值,则可以正常工作:

['hello','overflow'].inject(0){|memo,s|memo+s.length}
=> 18

解决方法

你在 apidock得到了答案:

If you do not explicitly specify an initial value for memo,then uses the first element of collection is used as the initial value of memo.

也就是说,如果没有初始值,你就会尝试’hello”stack’.length

猜你在找的Ruby相关文章