当我们必须通过一个';w';作为在Ruby中打开的额外参数

当我们必须通过一个';w';作为在Ruby中打开的额外参数,ruby,Ruby,我正在使用Zed Shaw的《艰苦学习Ruby》一书学习Ruby。我被困在练习16:读写文件中,因为我不明白为什么我们必须将一个'w'作为额外参数传递给Ruby中的open,并在同一个文件上称为truncate方法 这是代码示例 puts "Opening the file..." target = open(filename, 'w') puts "Truncating the file. Goodbye!" target.truncate(0) 我们将非常感谢任何形式的帮助。首先,使用

我正在使用Zed Shaw的《艰苦学习Ruby》一书学习Ruby。我被困在练习16:读写文件中,因为我不明白为什么我们必须将一个'w'作为额外参数传递给Ruby中的open,并在同一个文件上称为truncate方法

这是代码示例

puts "Opening the file..."
target = open(filename, 'w')

puts "Truncating the file.  Goodbye!"
target.truncate(0)

我们将非常感谢任何形式的帮助。

首先,使用'w'模式将告诉Ruby使用您指定的名称创建一个新文件,否则它将完全覆盖任何已经具有该名称的文件。这意味着它将用您提供的任何文本替换现有文件中的所有内容

虽然您也可以使用truncate()方法覆盖文件的内容,但使用truncate(),您可以根据您当前在文件中的位置声明要删除多少文件。没有参数(
truncate()
)或参数为0(
truncate(0)
),truncate()的行为类似于'w',而'w'总是将整个文件擦除干净,truncate()帮助您指定要擦除的文件内容量

因此,这行代码
target=open(filename,'w')
,读取名为
filename
的文件,并将其写入(它会完全擦除该文件的内容)。另外,行
target.truncate(0)
也会用文件名
filename
擦除此文件的内容

换句话说,两种方法'w'truncate()都执行相同的操作,即擦除文件的全部内容。但是Zed Shaw在练习中直观地使用了这两种方法,并要求对他为什么同时使用这两种方法进行研究,以便了解这两种方法是如何使用的,以及这两种方法执行相似的操作

作为额外知识的一种形式,使用'a'模式仍然会告诉Ruby使用您指定的名称创建一个新文件(如果该文件还不存在)。但与'w'模式不同,如果文件确实存在,Ruby将在文件末尾开始写入,这样就不会丢失已经存在的任何内容

就这些

我希望这有帮助