使用exists标志覆盖现有文件

时间:2015-06-06 13:11:32

标签: racket

我正在阅读racket文档的FileSystem部分,我无法弄清楚如何使用exists标志,这是我写的:

(define (write-file file data) 
  (with-output-to-file file 
    (lambda () 
      (write data))
    #:exists (or/c 'error 'append 'update 'can-update 'replace 'truncate 'must-truncate 'truncate/replace)))))

文档没有提供示例用法,我是通过示例学习最好的人之一。

1 个答案:

答案 0 :(得分:2)

(or/c 'error 'append 'update 'can-update 'replace 
      'truncate 'must-truncate 'truncate/replace)))))

表示您需要选择其中一个标志。

例如:

 (define (write-file file data) 
   (with-output-to-file file 
     (lambda () 
       (write data))
     #:exists 'replace))

指南中充满了示例:http://docs.racket-lang.org/guide/ports.html

更新

这是我试图解释如何阅读文档。 蓝框的第一部分包含:

(open-output-file path               
     [  #:mode mode-flag                 
        #:exists exists-flag])      →       output-port?

这意味着函数open-output-file接受一个参数path 并返回output-port

(open-output-file "foo.txt")将打开文件并返回一个端口。 方括号表示可选参数。例如: (open-output-file "foo.txt" #:mode 'binary)将以二进制模式打开文件。

文档说#:mode mode-flag所以#:mode之后的内容必须是合法mode-flag。在蓝色框中再说:

  mode-flag   : (or/c 'binary 'text) = 'binary

这意味着mode-flag可以是'binary'text

请注意,还解释了path参数:

  path        : path-string?

这意味着必须使用path-string?将返回true的值。 要查看这意味着什么,请单击path-string?并阅读有关路径字符串的内容。

最后一部分是exists-flag的列表。 or/c意味着我们必须一次使用这些标志。

  exists-flag : (or/c 'error 'append 'update 'can-update
                      'replace 'truncate 'must-truncate 'truncate/replace)

另请注意,文档分为两部分:参考和指南。 “指南”中有更多示例,请查看。