数组 – 为什么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一样使用它(为每个参数运行块).

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...