如何更改球拍中的輸入端口?更改球拍中的當前輸入端口
也就是說,假設我創建一個新的輸入端口:
(define my-port (open-input-string "this is a test"))
我怎樣才能讓這個現在(current-input-port)
返回my-port
?
如何更改球拍中的輸入端口?更改球拍中的當前輸入端口
也就是說,假設我創建一個新的輸入端口:
(define my-port (open-input-string "this is a test"))
我怎樣才能讓這個現在(current-input-port)
返回my-port
?
(current-input-port my-port)
不要在racket
REPL!這將導致所有後續的REPL輸入來自該源。 (可以在DrRacket中運行,但是,即使在DrRacket REPL中也是如此)。
要添加到Chris的答案;當前的輸入端口就是所謂的「參數」,它非常接近動態範圍的設置/變量。一般來說,使用'參數化'來設置當前輸入端口只是暫時的更清潔和更保守。就像這樣:
(parameterize ([current-input-port my-port])
... do some stuff ...
)
評估此代碼將導致輸入端口,爲您的身體的代碼和它調用的任何代碼中設置,但不會「流血了」成在外面評估代碼;它也將取消特殊或延續退出的更改。
我查看了球拍文檔的參數設置,但我無法理解它。球拍如何知道當前輸入端口是一種可以改變某些隱藏值的函數?還是它只是採取所有的副作用,並使他們暫時(只在內...做一些東西...然後它改變他們回來)? – Cam
'parameter'只是一個可以用0或1個參數調用的函數。傳遞1個參數,它將「設置」一個新值。傳遞0個參數,它將「獲取」當前值。目前爲止有意義嗎?接下來,'parameterize'可以用於任何這樣的函數。它只是做一個「get」來保存原始值,一個你想要的值的「集合」,然後它執行你的「..做一些東西..」,它恢復原始值(它做了一個「set 「它的價值原來是」得到「,或者erm,'got」),最後它返回你的「..有些東西..」的價值 –
ps我簡單地回答了我認爲的要點實際上,一個Racket'參數'也是每個線程的,另外,'parameterize'可以讓你保存/設置/恢復多個參數,這很方便,而且很有可能還有其他的細微差別,yoda-level但是,我只是想回答「參數化怎麼知道'current-input-port'是一個變異隱藏變量的函數?」 –
太棒了,謝謝!那是我正在尋找的確切的東西。 – Cam