gpt4 book ai didi

ruby - File.open ('file.txt' ) 与 File.open ('file.txt' ).readlines

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:07 31 4
gpt4 key购买 nike

我使用 File.open('file.txt').classFile.open('file.txt').readlines.class 以及前者进行了检查一个返回 File,后者返回 Array

我理解这种差异,但如果我这样做:

    File.open('file.txt').collect           {|l| l.upcase} 
=== File.open('file.txt').readlines.collect {|l| l.upcase}

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

而且,我假设在两个表达式中传递给 block 的参数都是文件中的一行作为字符串,这使得比较返回 true,是否正确?如果是这样,我如何知道在编写代码时将哪种参数传递给 block ?我是否必须检查文档或源代码之类的东西?

比如,我知道怎么做

['a','b','c'].each_with_index { |num, index|  puts "#{index + 1}: #{num}" }  

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

希望这是有道理的,谢谢!

最佳答案

在 irb 中轻松地进行一些 Ruby 自省(introspection)。

irb(main):001:0> puts File.ancestors.inspect
[File, IO, File::Constants, Enumerable, Object, Kernel, BasicObject]

此结果向我们展示了 File 类继承自的类,其中包括类 Enumerable 的方法。那么 File.readlines 返回的是什么对象呢?我认为一个数组,让我们检查一下。

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

这可能有点矫枉过正,但我​​们可以验证数组中是否存在可枚举方法。

irb(main):003:0> puts Array.ancestors.inspect
[Array, Enumerable, Object, Kernel, BasicObject]

关于ruby - File.open ('file.txt' ) 与 File.open ('file.txt' ).readlines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30411044/

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