ruby – 为什么带有块和.map的each_slice返回nil

ruby – 为什么带有块和.map的each_slice返回nil,第1张

概述为什么这会返回nil,第2行是什么意思?该数组代表一个Sudoku难题的行,我正在尝试为其创建解决方案. 我在irb中尝试不同的方法来查看我可以查看数组的不同方法. array = ['015003002000100906270068430490002017501040380003905000900081040860070025037204600']array.each_slice(9) { | 为什么这会返回nil,第2行是什么意思?该数组代表一个Sudoku难题的行,我正在尝试为其创建解决方案.

我在irb中尝试不同的方法来查看我可以查看数组的不同方法.

array = ['015003002000100906270068430490002017501040380003905000900081040860070025037204600']array.each_slice(9) { |e| puts e.map }#<Enumerator:0x0000010288a470>=> nil
解决方法 有些方法需要一个块,如果没有提供块,它们会返回Enumerable.

在您的示例中,您调用了map而不提供任何块.

但是你可以在枚举器上调用可枚举的方法.这允许您更改迭代器的行为.

array[0].split('').each_slice(9).map { |el| el }=> [["0","1","5","0","3","2"],["0","9","6"],["2","7","6","8","4","0"],["4","2","7"],["5",["9",["8","5"],"0"]]

这是Ruby中稍微高级的主题之一,但互联网上有很多资源,f.i. http://www.sitepoint.com/guide-ruby-collections-iii-enumerable-enumerator/

编辑:

只是回答评论中的问题:数组中只有一个长字符串.我不问为什么,但只是举个例子,我需要实际的(字符串?)数字数组. array [0]接受数组中的第一个元素(长数字串).当我有一个字符串时,我可以调用String#split来获得类似`[“0”,“1”,“5”,“…”]的数组.

Array包含Enumerable模块,因为你可以在其上调用each_slice之类的方法.正如文档所述(http://rubydoc.info/stdlib/core/Enumerable:each_slice):

If no block is given,returns an enumerator

所以在调用each_slice(9)后,我得到了Enumerator实例(http://rubydoc.info/stdlib/core/Enumerator).它有一些自己的方法,但也包括Enumerable模块(使用map,each_slice等方法.这里是乐趣开始的地方.如果我在枚举器上调用任何这些方法(如map),它将不会接收数组的每个元素,像在正常情况下一样,但每个元素由枚举器“返回”,即每个单元素现在是9个元素的数组.

一如既往,我强烈推荐Well Grounded Rubyist,@R_419_7004@对这些主题进行了彻底的解释. http://www.manning.com/black2/

总结

以上是内存溢出为你收集整理的ruby – 为什么带有块和.map的each_slice返回nil全部内容,希望文章能够帮你解决ruby – 为什么带有块和.map的each_slice返回nil所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1284271.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存