我们正在尝试使用IronScheme构建一个日志文件,我们已经使用racket为它编写了代码。它在球拍中工作正常,但IronScheme会抛出错误。这是我们到目前为止所做的:
(define write-to-log
(lambda(whatToWrite)
(with-output-to-file "robot-log.txt"
(lambda () (printf (string-append whatToWrite "\r\n" ))) #:exists 'append)))
了解在使用with-output-to-file时我们如何使用“exists”可选参数。我们不确定如何使此可选参数与IronScheme一起使用。有没有办法让这个工作,或替代方法?
请注意,我们要将字符串附加到现有的.txt文件中。如果我们不使用可选参数,则会抛出一个错误,指出该文件已存在。
答案 0 :(得分:1)
IronScheme支持R6RS:)
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button ng-disabled="myForm.$invalid || myForm.$pending">Save</button>
</form>
无法使用 file-options
,因此您需要使用with-output-to-file
。
示例(不正确):
open-file-output-port
<强>更新强>
以上不工作。看来你可能在IronScheme中发现了一个错误。虽然从R6RS中不清楚(let ((p (open-file-output-port "robot-log.txt" (file-options no-create))))
(fprintf p "~a\r\n" whatToWrite)
(close-port p))
应该表现得像追加,如果有的话。我会进一步调查并提供反馈。
更新2:
我已经和R6RS的一位编辑谈过,似乎没有一种可移植的方式来指定'追加模式'。我们当然可以在.NET中使用它,因此我将通过添加另一个file-options
来解决此问题。我还会考虑为'simple io'程序添加一些重载来处理这个问题,因为使用上面的代码相当繁琐。感谢您发现问题!
更新3:
我已经解决了这个问题。从TFS rev 114008开始,file-options
已添加到append
。此外,file-options
,with-output-to-file
和call-with-output-file
还有一个额外的可选参数来指示“追加模式”。您可以从http://build.ironscheme.net/获取最新版本。
示例:
open-output-file
答案 1 :(得分:0)
据我所知,IronScheme基于R5RS。来自R5RS Documentation:
对于
with-output-to-file
,如果文件已存在,则效果未指定。
因此抛出错误肯定与规范一致,并且不应期望Racket代码的可移植性。
警告:此代码在不同的R5RS实现上运行,而不是IronScheme 。
如果您只想附加到R5RS中的现有文件:
(define my-file (open-output-file "robotlog.txt"))
(display (string-append what-to-write "\r\n") my-file)
(close-output-port my-file)
这是一种简单的方法,可以让你接近你想要的。