数组 – 为什么Dir.glob(“* .txt”).sort也需要.each?

前端之家收集整理的这篇文章主要介绍了数组 – 为什么Dir.glob(“* .txt”).sort也需要.each?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Dir.glob(“*.txt”){| f | p f}打印文件名.

Dir.glob(“*.txt”).sort {| f | p f}因ArgumentError而失败.

Dir.glob(“*.txt”).sort.each {| f | p f}按字母顺序打印文件名.

为什么第二个失败?更好的是,为什么第一个工作,有或没有.each?

> Dir.glob和Dir.glob.sort都是数组.
> Dir.glob.methods == Dir.glob.sort.methods.

(灵感来自Alphabetize results of Dir.glob.不是Dir.glob with sort issue的副本,因为“第三个”已经回答了那个人的问题.)

解决方法

另一个答案是正确的,但我认为有更深层次的解释.在方法调用之后有一个块,比如Dir.glob(“* .txt”){| f | p f},该块是该方法的(可选)参数.在Dir.glob的定义中,有一个运行块的yield语句.

链接方法时,如Dir.glob(“* .txt”).sort {| f | p f},该块成为sort方法的参数,而不是glob方法. sort也可以用一个块来定义一个比较,但是这个块在那个上下文中没有意义.

链接每个得到Dir.glob(“* .txt”).sort.each {| f | p f}使块成为每个方法的参数,它像glob一样使用它(为每个参数运行块).

猜你在找的Ruby相关文章