首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

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
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30411044

复制
相关文章

相似问题

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