改变球拍中的当前输入端口

时间:2011-11-15 03:51:56

标签: scheme racket

如何更改球拍中的输入端口?

也就是说,假设我创建了一个新的输入端口:

(define my-port (open-input-string "this is a test"))

如何才能让(current-input-port)现在返回my-port

2 个答案:

答案 0 :(得分:7)

加入克里斯的回答;当前的输入端口是所谓的“参数”,它几乎是一个动态范围的设置/变量。通常,使用'parameterize'暂时设置当前输入端口更干净,更保守。像这样:

(parameterize ([current-input-port my-port])
  ... do some stuff ...
  )

评估此代码将导致为您的正文代码及其调用的任何代码设置输入端口,但不会“渗透”到外部评估的代码中;它还将取消基于例外或基于继续的退出的更改。

答案 1 :(得分:3)

(current-input-port my-port)

请勿在{{1​​}} REPL执行此操作!这将导致所有后续REPL输入来自该源。 (然而,即使在DrRacket REPL中,也可以在DrRacket中运行。)