我的理解是,撰寫代碼時不應該考慮到測驗,測驗需要彎曲以迎合代碼。我的問題是,我有一個函式f1,它呼叫了從另一個函式f2回傳的輸入資料(一個 Haskell data 型別)。那么我如何撰寫一個提供不同的輸入資料的測驗案例呢?
當然,我可以給f1添加一個引數,用于輸入,但畢竟那是在迎合測驗。實際上比這更混亂,因為 f1 實際上是一個 Plutus 合約,并且該 arg 需要被序列化為 JSON -- 所有這一切都是為了測驗。另外,我可以從一個檔案中讀取輸入,并將檔案路徑作為一個引數來提供 -- 這個引數已經很糟糕了,但如果沒有必要,我不想使用一個檔案。
也許Template Haskell可以提供幫助,但我不確定如何幫助。或者,既然每個規則都有一個例外,這里也應該有一個例外。 請指教。
data ActualData = ActualData String String Integer
newtype Input = Input [ActualData]/span>
f1:: Contract () Schema Text ( )
f1 = do ()
let input = f2
...
f2 :: Input -- 將在未來確定,目前未知。
f2 =Input
[ActualData "BlackRock" "pkh1" 10
, ActualData "GreenRock" "pkh2" 20
]
uj5u.com熱心網友回復:
我認為最簡單的可能只是暴露兩個函式。一個接受輸入資料作為一個普通的舊函式輸入,另一個知道使用f2。所以:
f1WithArg :: X -> Y
f1WithArg x = {- ... -}
f1 :: Y
f1 = f2 >>= f1WithArg --或其他。
那么你將用f1WithArg來寫你的所有測驗,并且相信f1不會做任何有趣的計算。
另外,你可以暴露一個單一的f1,它需要一個Maybe X,具有類似的實作模式:
f1Auto :: Maybe X -> Y :.
f1Auto Nothing = f2 >>= f1Auto . Just -- or whatever .
f1Auto (Just x) = {- ... -}
如果你需要以編程方式決定輸入是否來自f2,這樣的介面可能很有用,但聽起來對你來說不是這樣的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/329812.html
標籤:
