標籤:

主流程序設計語言的標準庫中,類似於 fopen() 之類的函數的 "w"、"a" 等控制方法有何利弊?

像這樣output = File.open(to_file, "w")

裡面的『w』起什麼作用?

看的learn ruby the hard way.

裡面沒給解釋 百度也百度不到。

看輸出和不加『w』好像也沒什麼區別。。


open後面可以帶w或者r。這是縮寫。其中w的意思是「我的(wode)」,表示這個文件打開了是你的,你可以讀裡面的內容,也能向裡面寫內容;r的意思是「人家的(renjiade)」,表示這個文件你打來了也是人家的,你只能讀裡面的內容,不能往裡寫東西。


專註黑百度十年,不如題主一擊致命。

=================

我還特意去試了一下,少俠你別這樣,咱理客中一點

當然百度更懂中文,這個我服


所以要學Haskell啊

打開文件System.IO

openFile :: FilePath -&> IOMode -&> IO Handle

看函數類型就知道是做什麼的啦! IOMode是什麼? System.IO, Handle 是什麼? System.IO

data IOMode
= ReadMode
| WriteMode
| AppendMode
| ReadWriteMode

比rwa(+)易讀, 打錯了編譯器可以檢查出來, 要是說這個要打多點字我無話可說...

然後Ruby里的

# open(filename, mode="r" [, opt]) {|file| block } → obj

File.open(file_path, io_mode) do |handle|
#...
end

其實就是Haskell里的

withFile :: FilePath -&> IOMode -&> (Handle -&> IO r) -&> IO r

其實會Ruby就會Haskell啦/


題目改了啊,原來問的是ruby的File.open,所以可以通過查ruby文檔解決。

--------------

我來授人以漁。

ri (ruby index) 是用於在終端查看 ruby 幫助文檔的工具。

首先 ri File.open

得到

= File.open

(from ruby site)
------------------------------------------------------------------------------
File.open(filename, mode="r" [, opt]) -&> file
File.open(filename [, mode [, perm]] [, opt]) -&> file
File.open(filename, mode="r" [, opt]) {|file| block } -&> obj
File.open(filename [, mode [, perm]] [, opt]) {|file| block } -&> obj

------------------------------------------------------------------------------

With no associated block, File.open is a synonym for File.new. If the optional
code block is given, it will be passed the opened file as an argument and the
File object will automatically be closed when the block terminates. The value
of the block will be returned from File.open.

If a file is being created, its initial permissions may be set using the perm
parameter. See File.new for further discussion.

See IO.new for a description of the mode and opt parameters.

可知open的第二個參數是mode。再看最後一行,於是我們 ri IO.new

出來好多,找重點。

==== IO Open Mode

Ruby allows the following open modes:

"r" Read-only, starts at beginning of file (default mode).

"r+" Read-write, starts at beginning of file.

"w" Write-only, truncates existing file
to zero length or creates a new file for writing.

"w+" Read-write, truncates existing file to zero length
or creates a new file for reading and writing.

"a" Write-only, each write call appends data at end of file.
Creates a new file for writing if file does not exist.

"a+" Read-write, each write call appends data at end of file.
Creates a new file for reading and writing if file does
not exist.

所以"w"的意思就是

"w" Write-only, truncates existing file
to zero length or creates a new file for writing.


所以 LISP 大法好啊

Common Lisp 標準里的

open 函數和對應的 with-open-file 宏

使用:

:direction

:if-exists

:if-does-not-exist

:element-type

:external-format

:stream

六個關鍵字描述,突出一個直觀


http://ruby-doc.org/core-1.9.3/File.html#method-c-open

說baidu不到是不對的。

好吧改描述了。

那麼再試著回答一下:

這是C的習慣來的,也許改成file.OpenReadOnly

file.OpenWritable

file.OpenBinary什麼的更好呢

不過我個人意見,區別不大。


沒學過ruby 但是這玩意兒就是c裡面的東西。。。

r 文件只可讀,指針指向開頭,如果不存在則失敗

r+ 文件可讀可寫,其他同r

w 文件只可寫,如果存在則清空,不存在則創建

w+ 文件可讀可寫,其他同w

a 文件只可寫,指針指向末尾,不存在則創建

a+ 文件可讀可寫,其他同a


Flags (strings)

r File::RDONLY

r+ File::RDWR

w File::WRONLY|File::TRUNC|File::CREAT

a File::WRONLY|File::APPEND|File::CREAT

open (IO) - APIdock

Ruby 文件的輸入與輸出


相對於用bitwise-or來連接各個位,用string作為參數的利是,string里的內容是有順序的。

也許弊是你未必需要這個順序,比如在fopen里的這個參數所需要表達的意思。


fopen的這個陋習來源於當初C語言沒有enum。現在是個語言都有enum了,wa等字元串控制的flag也就成為了陋習。


伸手伸到這種程度,我建議各位大碼農就別慣著它了。


w的意思是write,可寫方式打開文件。你僅僅是輸出,看起來是一樣的。

PS:每個人都是菜鳥過來的,犯不著嘲諷。


你搜索的關鍵字是這樣的么:Ruby里open後面的括弧里加"w"有什麼用啊?

這種問題最簡單的解決辦法就是,看文檔


問題太犀利。


木埃

@埃木

@羅滴滴

@羅大有


不用說其它的,只回答題主問題。

fopen只是原先C庫實現。然後您說的其它主流語言都模仿了一下形勢。

利:本來就挺好理解的,保持統一就更加利於c程序員平滑過渡了

弊:百度搜索不到


太高端,你這樣子往死里黑別人是不道德的!


明明就是黑百度的帖子,用Google搜了一下:


沒學過ruby,不知道ruby的文檔如何。

我就不信Ruby官方文檔連這個參數都不描述一下。

編程問題你還是別百度了 ,從開始就養成好習慣


同學,你這搜索能力太膩害了。。你到底是怎麼百度的?讓小弟膜拜膜拜


這種問題不是都應該把file的一系列封裝函數一起抄個demo用一下,然後變換著用用,思考思考就出來了嘛


learn ruby the hard way《笨方法學ruby》

剛開始學編程這種書籍還是不看為好。


推薦閱讀:

2015 年的今天,Ruby on Rails 還有哪些獨特的價值?
Ruby 和 Ruby on Rails 在 2017 年還有前途嗎?
ruby語言前景如何?
使用 jeykll 或 octopress 在 GitHub 上架 Blog 的工作原理是怎樣的?
女,26歲,做了一年多的自動化測試,最近在糾結要不要轉行,求指點。?

TAG:Ruby | 編程 |