输出变量值到新文件

output variable value to new file

目前我有以下代码:

(define (write host code) 
  (with-output-to-file host 
    (lambda () 
      (printf code))))

(let   ([myself (find-system-path 'run-file)]
        [test (substring myself 1 3)])
  (printf "~s\n" myself)
  (write "hello.txt" myself))

我正在尝试写入变量 "myself" 的值。抱歉,我是个菜鸟,我不是函数式语言的忠实拥护者。

错误:

printf: contract violation
  expected: string?
  given: #<path:C:\Program Files\Racket\DrRacket.exe>

所以我假设我必须自己将变量转换为字符串?我在这里很困惑,我只知道perl/python

等OOP语言

问题不在于 printf:

> (printf "~s\n" (find-system-path 'run-file))
#<path:/Users/soegaard/racketgithub/racket/racket/bin/../DrRacket.app/Contents/MacOS/DrRacket>

问题是substringsubstring 函数需要一个字符串作为输入,并在获取路径时给出错误。

您可以让 printf 像这样限制输出的长度:

> (parameterize ([error-print-width 20])
    (printf "~.s\n" (find-system-path 'run-file)))
#<path:/Users/soe...

注意 ~.s 中的点。

不过也可以把路径转成字符串,然后用substring.

> (substring (~a (find-system-path 'run-file)) 0 20)
"/Users/soegaard/rack"