将变量值输出到新文件

时间:2015-06-06 05:30:50

标签: racket

目前我有以下代码:

(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))

我试图写出变量"我自己"的价值。很抱歉这是一个菜鸟,我不是功能语言的忠实粉丝。

错误:

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

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

1 个答案:

答案 0 :(得分:0)

问题不在于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"