'a'
和|f|
的含义是什么?
open('myfile.out', 'a') { |f|
f.puts "Hello, world."
}
答案 0 :(得分:7)
来自红宝石IO doc:
"a" | Write-only, starts at end of file if file exists,
| otherwise creates a new file for writing.
|f|
是一个变量,用于保存块中的IO对象({}
中的所有内容)。所以当你f.puts "Hello World"
在IO对象上调用puts
然后写入文件时。
答案 1 :(得分:5)
'a'
只是一个文件打开模式,就像你在C / C ++中看到的那样。这意味着追加,并且相对不常见 - 您更有可能熟悉'r'
(阅读),'w'
(写)等。
{|f| ... }
位是令人兴奋的部分。它被称为aa block - 它们无处不在,而且它们可能是我最喜欢的Ruby部分 - 我最近又回到了C ++,我发现自己一直在诅咒那些不支持它们的语言 >
将foo(bar) {|baz| ... }
之类的代码视为创建无名函数,并将该函数作为另一个(隐藏)参数传递给foo
(有点像this
是成员函数的隐藏参数C ++) - 它不是隐藏的,因为你在那里指定它。
现在,当您将块传递给foo
时,它最终将调用您的块(使用yield
语句),它将提供参数baz
。如果我的foo
行为与File.open
函数相似,则其定义如下所示:
def foo(filename, &block)
file = File.open(filename)
yield(file)
file.close
end
您可以看到它如何打开文件,使用yield
将其传递给您的块,然后在块返回后关闭文件。非常方便 - 街区是你的朋友!
另一个开始缠绕它们的好地方是each
函数 - Ruby中最简单和最常见的块函数之一:
[holt@Michaela ~]$ irb
irb(main):001:0> ['Welcome', 'to', 'Ruby!'].each {|word| puts word}
Welcome
to
Ruby!
=> ["Welcome", "to", "Ruby!"]
irb(main):002:0>
这一次,你的块被调用三次,每次一个不同的数组元素yield
被word
作为你的块 - 这是一个为每个元素调用一个函数的超级简单方法一个数组。
希望这会有所帮助,欢迎来到Ruby!
答案 2 :(得分:4)
'a' - >打开文件的模式('追加'模式) f是块的参数。块是可以执行的一段代码(它是下面的Proc对象)。
在这里,我认为f将是文件描述符。
答案 3 :(得分:3)
1)你调用open方法,传入两个参数:
2)open
中存在的Kernel方法产生IO stream object又名|f|
,您可以在整个区块内访问。
3)你将“hello world”附加到myfile.out
4)块结束后,IO流关闭。
答案 4 :(得分:2)
'a'代表append,以只写模式打开文件,并在文件末尾开始写入。如果不存在文件,则创建新文件。有关详细信息,请参阅Ruby Docs。
| f |是一个块参数,它在{}中传递。有关块的更多信息,请参阅The Pragmatic Programmer's Guide。
答案 5 :(得分:2)
我强烈建议您阅读File class的帮助文件,了解初学者
您可以在那里看到open方法的文档
方法签名为File.open(filename, mode)
因此,在您的示例中,a
是在这种情况下追加的模式。以下是mode
参数的有效值列表:
'r'
- 打开文件进行阅读。该文件必须存在。
'w'
- 创建一个空文件进行编写。如果已存在具有相同名称的文件,则其内容将被删除,并且该文件将被视为新的空文件
'a'
- 附加到文件。写操作会在文件末尾附加数据。如果文件不存在,则创建该文件
'r+'
- 打开文件以便更新读写。该文件必须存在。
'w+'
- 为读取和写入创建一个空文件。如果已存在具有相同名称的文件,则其内容将被删除,并且该文件将被视为新的空文件
'a+'
- 打开文件进行阅读和追加。所有写入操作都在文件末尾执行,以保护以前的内容被覆盖。您可以将内部指针重新定位(fseek,倒带)到文件中的任何位置以进行读取,但写入操作会将其移回文件末尾。如果文件不存在,则创建该文件。
如果在块中使用File.open
,例如在您的示例中,则f
成为指向新打开文件的块变量,这允许您同时读取和写入文件只使用f
作为参考,而在块内。使用这种形式的File.open
很好,因为它会在块结束时自动关闭文件。
答案 6 :(得分:1)
open('myfile.out','a') - >这里'a'表示只写访问权限。指针位于文件末尾。
| F |是文件描述符,它确实是“Hello,World。”的推文。
而不是| f |,你可以写任何东西,比如说| abc |或者| line |,没关系。