'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