0

呼び出す手順があります(display "foo")

displayユニットテストを作成して、そこに正しいデータを送信しているが、入力を標準出力に送信していることを確認したいと思います。

(define (display x #!optional (port ##sys#standard-output))
  (##sys#check-output-port port #t 'display)
  (##sys#print x #f port) )

質問: 他の言語では、標準出力を変数に書き込むだけのものとして再定義し、テスト後に元に戻すことがあります。それはチキンで正しいことですか?もしそうなら、どのように?そうでない場合、何をするのが正しいですか?

注:ユニットテストを行っているメソッドを変更する必要があるため、2番目のパラメーターとして表示するために何か他のものを渡すことはオプションではありません。

4

1 に答える 1

2

これportはオプションの 2 番目の引数で、デフォルトは標準出力です。

文字列に送信するには、次の 2 つのいずれかを実行できます。最初の方法は、文字列ポートを作成し、それをdisplayオプションの引数として渡して、標準出力ポートの代わりに使用することです。

(use ports)
(call-with-output-string
  (lambda (my-string-port)
    (display "foo" my-string-port)))

2 つ目は、現在の出力ポートを文字列ポートに一時的にバインドすることです。

(use ports)
(with-output-to-string
  (lambda () (display "foo")))

print2 番目の方法は、たとえばのように、ポート引数を受け入れないプロシージャを呼び出す場合に最も役立ちます。

これは、文字列ポートに関するマニュアルのセクションにあります。

于 2015-11-22T14:53:59.867 に答える