我有一個函式,它類似于(或),它接受一個布林值,如果用戶輸入為真或布林值為真,則回傳真。
我無法更改有關 orFunc 的任何內容。它必須保持原樣
orFunc :: Bool -> IO Bool
orFunc xs = do ys <- getLine
let rev1 = xs || (read ys::Bool)
return rev1
所以.. (orFunc False) 用戶輸入為 True 將回傳 True。
現在假設,我想用一系列自動輸入來測驗這個功能。
函式測驗器呼叫我們的 orFunc,并希望將位于我們的 false.txt 檔案中的單詞“False”推送到 orFunc 中。這樣,我不需要每次都在函式中輸入單詞“False”。它會自動從 false.txt 中抓取它。當 orFunc 不將輸入作為引數時,我該怎么做?
這是它應該是什么樣子的示例。這不起作用,但這是我嘗試過的。
tester :: IO Bool -> IO Bool
tester xs = do ys <- readFile "false.txt"
xs <- ys
return xs
這是我將如何對其進行一些測驗的方法。
{--This will return True because True || False = True --}
tester (orFunc True)
{--This will return False because False || False = False --}
tester (orFunc False)
uj5u.com熱心網友回復:
我最好的建議是不要。相反,抽象orFunc成一個IO執行業務邏輯的部分和一個執行業務邏輯的部分,并獨立于IO.
但是如果你已經完全確定了,一種方法是打開你的檔案并將其檔案描述符復制到標準輸入。像這樣:
import System.IO
import System.Posix.IO
main = do
fd <- openFile "false.txt" ReadMode >>= handleToFd
dupTo fd stdInput
orFunc False
這僅適用于 Linux-likes。Windows 可能在某處有類似的 API,但我對它還不夠熟悉,無法提供關于何處的良好指示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/462846.html
標籤:哈斯克尔
