Swift中类似Haskell的as-patterns?

Swift中类似Haskell的as-patterns?,第1张

概述Swift与模式匹配中使用的Haskell的 as-patterns有什么相似之处吗?我试图通过使用嵌套模式摆脱下面一段代码中的第二个switch语句: indirect enum Type: CustomStringConvertible { case Int case Fun(Type, Type) var description: String { switch sel Swift与模式匹配中使用的Haskell的 as-patterns有什么相似之处吗?我试图通过使用嵌套模式摆脱下面一段代码中的第二个switch语句:

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"

使用as-patterns的Haskell等价物是这样的:

data Type =    Int  | Fun Type Typedesc :: Type -> Stringdesc t =  case t of    Int -> "int"    Fun (p @ (Fun _ _)) r -> "(" ++ desc p ++ ") -> " ++ desc r    Fun p r -> desc p ++ " -> " ++ desc r
解决方法 与Haskell as-pattern不同,但你可以摆脱它
第二个带有嵌套模式的switch语句,如下所示:

var description: String {    switch self {    case .Int: return "int"    case .Fun(.Fun(let p,let q),let r): return "(\(Type.Fun(p,q))) -> \(r)"    case .Fun(let p,let r): return "\(p) -> \(r)"    }}

或通过重新安排案件:

var description: String {    switch self {    case .Int: return "int"    case .Fun(.Int,let r): return "int -> \(r)"    case .Fun(let p,let r): return "(\(p)) -> \(r)"    }}
总结

以上是内存溢出为你收集整理的Swift中类似Haskell的as-patterns?全部内容,希望文章能够帮你解决Swift中类似Haskell的as-patterns?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1003201.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存