Изменение текущего порта ввода в ракетке - PullRequest
4 голосов
/ 15 ноября 2011

Как мне изменить входной порт в ракетке?

То есть, предположим, я создаю новый входной порт:

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

Как мне сделать так, чтобы (current-input-port) теперь возвращал my-port?

Ответы [ 2 ]

7 голосов
/ 15 ноября 2011

Добавить к ответу Криса; текущий входной порт является так называемым «параметром», который очень приблизительно является динамически изменяемой настройкой / переменной. В целом, более понятным и более консервативным является установка текущего входного порта только временно, с использованием «параметризации». Как это:

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

Оценка этого кода приведет к тому, что порт ввода будет установлен для вашего кода тела и любого кода, который он вызывает, но не будет «перетекать» в код, который оценивается снаружи; это также отменяет изменение при исключительном или продолжающемся выходе.

3 голосов
/ 15 ноября 2011
(current-input-port my-port)

Не делайте этого на racket REPL! Это приведет к тому, что все последующие входные данные REPL поступят из этого источника. (Впрочем, запускать в DrRacket нормально, даже в DrRacket REPL.)

...