gpt4 book ai didi

ruby - 反向方法 - 1.9.1 v 1.8.7

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:57 25 4
gpt4 key购买 nike

我写了一些代码:

output = File.open(text_file).collect.reverse.join("<BR>")

它似乎在 1.8.7 上工作正常但抛出错误

NoMethodError - undefined method 'reverse' for #<Enumerator: #<File:C:\EduTester\cron\rufus.log>:collect>:

在 1.9.1 上(ruby 1.9.3p194 (2012-04-20) [i386-mingw32])

有人知道为什么会发生这种情况以及如何解决这个问题吗? (为什么我最感兴趣。)

最佳答案

首先如何修复它 - 你应该这样做:

output = File.open(text_file).to_a.reverse.join("<BR>") 

这将适用于任一版本的 Ruby。基本上,您需要先将文件转换为行数组(使用 .to_a),然后再反转它们并添加换行符。

就原因而言(这有点技术性):File 混合在 Enumerable 模块中,这为它提供了 collect 等方法.现在在 Ruby 1.87 中,如果您在没有 block 的情况下调用 Enumerable.collect,它将返回一个 Array。但在 1.9 中,它返回一个 Enumerator - 它不响应 reverse 方法。

以下是相关方法的两个版本:

http://ruby-doc.org/core-1.8.7/Enumerable.html#method-i-collect
http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-collect

所以基本上在 1.9 之前 .collect 是一个(hacky)等同于 .to_a。但始终使用 .to_a 将某些内容转换为数组。

关于ruby - 反向方法 - 1.9.1 v 1.8.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12812102/

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