我上次用 Ruby 撰寫代碼已經有一段時間了(Ruby 2 是新的,哇,它已經是 3 了),所以我覺得自己像個白癡。
我有一個僅包含單詞的文本檔案:
hello
我的 ruby?? 檔案包含以下代碼:
content = File.read("test_file_str.txt","w")
puts content
當我運行它時,我得到:
`read': no implicit conversion of String into Integer (TypeError)
我以前從未發生過這種情況,但是自從我撰寫代碼以來已經有一段時間了,很明顯是 PEBKAC。
但是,當我在沒有,"w"一切的情況下運行時似乎很好。我究竟做錯了什么?
紅寶石 3??.0.3p157(2021-11-24 修訂版 3fb7d2cadc)[x64-mingw32]
uj5u.com熱心網友回復:
根據檔案, for 的第二個引數File.read是要從給定檔案讀取的位元組長度,這意味著是一個整數。
打開檔案,可選地尋找給定的偏移量,然后回傳長度位元組(默認為檔案的其余部分)。read 確保檔案在回傳之前關閉。
因此,在您的情況下,發生錯誤是因為您傳遞了一個必須是整數的引數。它沒有在 for 的檔案中單獨說明File.read這一點,但它是為File#read:
從 I/O 流中讀取 length 個位元組。
length 必須是非負整數或 nil。
如果要指定模式,可以使用該mode選項:
File.read("filename", mode: "r") # "r" or any other
# or
File.new("filename", mode: "r").read(1)
uj5u.com熱心網友回復:
打開檔案進行讀取不接受寫入模式
通常,在寫入模式下打開檔案句柄進行讀取是沒有意義的。因此,您需要將您的方法重構為:
content = File.read("test_file_str.txt")
也許:
content = File.new("test_file_str.txt", "r ").read
取決于你想要做什么。
另請參見:IO#new 中的檔案權限
Ruby 3.0.3 中的 File 檔案將您指向IO#new以獲得可用的模式權限。如果您沒有看到您正在尋找的選項,您可以查看那里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/383471.html
