4
Swift是否有類似於模式匹配中使用的Haskell's as-patterns?我想用嵌套模式,以擺脫在下面這段代碼的第二switch
聲明:Swift中的Haskell-like-patterns?
indirect enum Type: CustomStringConvertible {
case Int
case Fun(Type, Type)
var description: String {
switch self {
case .Int: return "int"
case .Fun(let p, let r):
switch p {
case .Fun(_): return "(\(p)) -> \(r)"
case _: return "\(p) -> \(r)"
}
}
}
}
Type.Int // "int"
Type.Fun(.Int, .Int) // "int -> int"
Type.Fun(Type.Fun(.Int, .Int), .Int) // "(int -> int) -> int"
Haskell的等效,使用作爲圖案,會是這樣:
data Type =
Int
| Fun Type Type
desc :: Type -> String
desc t =
case t of
Int -> "int"
Fun (p @ (Fun _ _)) r -> "(" ++ desc p ++ ") -> " ++ desc r
Fun p r -> desc p ++ " -> " ++ desc r
謝謝,但我實際上是希望避免這種情況。 –
不幸的是,第二個版本並沒有做我想做的事情,那就是用parantheses來表示函數類型中的左關聯。最後,我去了這個,它使用'where'子句:https://gist.github.com/igstan/b786d870eb28d7e73dcf5223771db6c4 –
@IonuţG.Stan:我已經考慮過這種方法,但認爲它是「作弊」因爲你仍然使用第二個switch語句(只是間接的)。 –