首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >File.open('file.txt')与File.open(file.txt).readlines

File.open('file.txt')与File.open(file.txt).readlines
EN

Stack Overflow用户
提问于 2015-05-23 09:25:31
回答 3查看 222关注 0票数 2

我使用File.open('file.txt').classFile.open('file.txt').readlines.class进行检查,前者返回文件,后者返回数组

我理解这种区别,但如果我做这样的事情:

代码语言:javascript
运行
复制
    File.open('file.txt').collect           {|l| l.upcase} 
=== File.open('file.txt').readlines.collect {|l| l.upcase}

它还真。那么,当对象中的每个项作为参数传递给块时,这两个对象之间有什么区别吗?

而且,我还假设两个表达式中传递给块的参数都是文件中的一行字符串,这使得比较返回为真,对吗?如果是这样的话,我如何知道在编写代码时会向块传递什么样的参数?我需要检查像文档或源代码这样的东西吗?

例如,我知道

代码语言:javascript
运行
复制
['a','b','c'].each_with_index { |num, index|  puts "#{index + 1}: #{num}" }  

工作而且认为这是理所当然的。但是,我如何知道第一个参数应该是数组中的每个项,第二个参数应该是索引,而不是相反?

希望这是有意义的,谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-23 11:01:50

在irb中做一些Ruby内省就可以了。

代码语言:javascript
运行
复制
irb(main):001:0> puts File.ancestors.inspect
[File, IO, File::Constants, Enumerable, Object, Kernel, BasicObject]

这个结果向我们展示了File类继承的类,其中包含了类枚举的方法。那么从File.readlines返回什么对象呢?我想是阵列,让我们检查一下。

代码语言:javascript
运行
复制
ri File.readlines
IO.readlines(name, sep=$/ [, open_args])     -> array
IO.readlines(name, limit [, open_args])      -> array
IO.readlines(name, sep, limit [, open_args]) -> array

这可能是过份的,但我们可以验证数组中存在的可枚举方法。

代码语言:javascript
运行
复制
irb(main):003:0> puts Array.ancestors.inspect
[Array, Enumerable, Object, Kernel, BasicObject]
票数 1
EN

Stack Overflow用户

发布于 2015-05-23 10:57:52

我将尽量使这一反应尽可能紧凑。

第二个问题--如果您对来自标准库的对象进行操作,那么您可以始终引用它们的文档,以便100%确定在传递一个块时所期望的参数。例如,您将多次在不同的数据结构(Array, Hash, ...)上使用像Array, Hash, ...这样的方法。在您习惯它们之前,您可能会在文档中找到有关它们的所有信息,例如:http://ruby-doc.org/core-2.2.0/Array.html

如果您是在非核心数据结构上操作(例如,一个来自gem的类,您应该始终浏览它的文档或Github上的源代码)。

第一个问题。结果可能是相同的,当使用不同的方法,但在更深层次上可能有一些差异。因为你的案子是基于文件的。读取文件内容可以通过两种方式处理。首先将所有内容读入内存,然后对字符串数组进行操作,第二次读取的文件行可能会持续更长时间,但不会保留那么多内存。

票数 0
EN

Stack Overflow用户

发布于 2015-05-23 14:23:53

Enumerable#each_with_index中,参数与它们在方法名称本身中的顺序相同,首先是元素,然后是索引。each_with_object也是如此。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30411044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档