這是一個簡單的問題,我假設一個複雜的答案。Haskell中的前提條件檢查有哪些選項
一個非常常見的編程問題是一個函數返回的東西,或失敗的先決條件檢查。在Java中我會使用拋出IllegalArgumentException
一些assert函數的方法開始,像這樣:
{
//method body
Assert.isNotNull(foo);
Assert.hasText(bar)
return magic(foo, bar);
}
我喜歡這個,這是每一個前提一oneliner。我不喜歡這個是拋出異常(因爲異常〜goto)。
在Scala中,我和Either一起工作,這有點笨重,但比拋出異常要好。
有人向我建議:
putStone stone originalBoard = case attemptedSuicide of
True -> Nothing
False -> Just boardAfterMove
where {
attemptedSuicide = undefined
boardAfterMove = undefined
}
我不喜歡的是,重點放在在真實與虛假,這本身沒什麼意思; attemptedSuicide
的先決條件是隱藏在語法之間,所以沒有明確的關聯,Nothing和putStone
(boardAfterMove)的實際實現並不明確是核心邏輯。啓動它不會編譯,但我相信這不會破壞我的問題的有效性。
什麼是前提條件檢查可以在Haskell乾淨地完成的方式?
我敢肯定,我甚至沒有問這個問題,我需要改進我的例子的語法。請耐心等待,我昨天晚上開始學習Haskell,同時我也在做一個苛刻的工作。我會根據自己的進步和當然的反饋來改進這個問題。 – iwein