'a'
和|f|
是什么意思?'a'在Ruby open()中意味着什么?| f |是什么意思?意思?
open('myfile.out', 'a') { |f|
f.puts "Hello, world."
}
'a'
和|f|
是什么意思?'a'在Ruby open()中意味着什么?| f |是什么意思?意思?
open('myfile.out', 'a') { |f|
f.puts "Hello, world."
}
'a'
只是一种文件打开模式,就像您在C/C++中看到的一样。这意味着追加,并且相对不常见 - 你更可能熟悉'r'
(已阅读),'w'
(写)等。
{|f| ... }
位是令人兴奋的部分。它被称为一个块 - 它们无处不在,它们可能是我最喜欢的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的最简单,最常用的模块功能之一:
[[email protected] ~]$ 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!
感谢所有的优秀答案。无法相信下面的代码可以在几行代码中实现我想要的内容,只需将其附加到dir树中的文件即可。 - require'find' Find.find(“c:\\ test \\”)do | filename | if!FileTest.directory?(filename) puts filename open(filename,'a'){| f | f.puts“你好,世界。” } end end – 2011-04-01 23:14:26
'A' - >在其中打开该文件( '追加' 模式)模式 f是所述块的参数。块是可以执行的一段代码(它是下面的一个Proc对象)。
这里,f是文件描述符,我想。
从红宝石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"
你打电话给puts
IO对象然后写入文件。
“a”代表追加,以只写模式打开文件,并开始在文件末尾写入。如果没有文件存在,则会创建一个新文件。请参阅Ruby Docs了解更多信息。
The | f |是一个块参数,它在{}中传递。有关块的更多信息,请参阅The Pragmatic Programmer's Guide。
open('myfile.out','a') - >这里的'a'表示只写访问。指针位于文件的末尾。
| f |是文件描述符,它放置了“Hello,World”。
而不是| f |,你可以写任何东西,比如说| abc |或|行|,没关系。
1)你调用open方法,传递两个参数:
2)存在于Kernel的方法open
,产生一个IO stream object又名|f|
,其中哟你可以访问整个块。
3)要附加的 “hello world” 到myfile.out
4)一旦块结束时,在IO流关闭。
我强烈建议通读File class的帮助文件来阅读初学者。
您可以在那里看到open方法的文档。
方法签名为File.open(filename, mode)
所以,在你的榜样,a
,就是在这种情况下是追加模式。以下是mode
参数的有效值列表:
'r'
- 打开文件以供阅读。该文件必须存在。
'w'
- 创建一个空文件进行写入。如果已存在具有相同名称的文件,则其内容将被删除,并将该文件视为新的空文件。
'a'
- 追加到文件。写操作将数据追加到文件的末尾。如果该文件不存在,则会创建该文件。
'r+'
- 打开文件进行更新读写。该文件必须存在。
'w+'
- 为阅读和写作创建一个空文件。如果已存在具有相同名称的文件,则其内容将被删除,并将该文件视为新的空文件。
'a+'
- 打开文件进行阅读和追加。所有写入操作都在文件末尾执行,以保护以前的内容被覆盖。您可以将内部指针重新定位(fseek,倒回)到文件中的任何位置进行读取,但写入操作会将其移回文件末尾。如果该文件不存在,则会创建该文件。
如果File.open
在一个块中使用,比如在你的榜样,那么f
成为块变量指向新打开的文件,它允许您读取和只用f
作为参考写入文件,而在块内。使用这种形式的File.open
是很好的,因为它在块结束时自动处理关闭文件。
您正在使用哪个Ruby教程? – 2011-04-01 20:50:45
你能推荐任何吗? – 2011-04-01 21:21:25