gpt4 book ai didi

arrays - 为什么 Dir.glob ("*.txt").sort 也需要 .each?

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:46 24 4
gpt4 key购买 nike

Dir.glob("*.txt") {|f| p f} 打印文件名。

Dir.glob("*.txt").sort {|f| p f} 因 ArgumentError 失败。

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

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

  • Dir.globDir.glob.sort 都是数组。
  • Dir.glob.methods == Dir.glob.sort.methods

(受 Alphabetize results of Dir.glob 启发。不是 Dir.glob with sort issue 的副本,因为“第三个”已经回答了那个问题。)

最佳答案

第二个失败,因为 sort {|f| p f} 真的没有意义。您使用 sort 的 block 应该是 "return -1, 0, or +1"并采用两个参数(要比较的元素),但您的 block 采用一个参数并返回该参数,因为 p str 返回 str

第三个很好,因为 sort 的默认比较器 block 相当于说:

sort { |a, b| a <=> b }

所以 .sort.each 非常合理。

如果您在第二个示例中使用 sort 期望的 block 排序:

Dir.glob("*.txt").sort {|a, b| a <=> b }

然后事情会更好。或者,如果您想按升序对事物进行排序,则可以省略该 block :

Dir.glob('*.txt').sort

关于arrays - 为什么 Dir.glob ("*.txt").sort 也需要 .each?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41248488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com