gpt4 book ai didi

swift - 如何在 Swift 中使用模式匹配重载函数?

转载 作者:行者123 更新时间:2023-11-28 13:20:59 25 4
gpt4 key购买 nike

在其他高级语言中,您可以使用模式匹配来实现函数重载,例如在 Mathematica 中。例如,您可以在没有 if 语句的情况下编写优雅的代码,这是我的意思的示例:

唱斐波那契:

fib[0|1] := 1
fib[n_Integer?Positive] := fib[n - 1] + fib[n - 2]
fib[n__] := fib /@ {n}
fib[n_] := "undefined"

这里是:

In[]:= fib[10]
Out[]= 89

In[]:= {fib[-2], fib["2"]}
Out[]= {"undefined", "undefined"}

In[]:= fib[1, 2, 3, 4, 5, 6, 7]
Out[]= {1, 2, 3, 5, 8, 13, 21}

swift 是否具有这种基于模式的参数或类似功能的功能?

最佳答案

Swift 在其重载中没有模式匹配,只有类型和协议(protocol)匹配。你能做的最好的事情是:

func fib(n: Int) -> Int {
switch n {
case 0, 1: return 1
default: return fib(n - 1) + fib(n - 2)
}
}

func fib(s: [Int]) -> [Int] {
return s.map { fib($0) }
}


fib(10) // 89
fib([3, 4, 5]) // [3, 5, 8]

我将处理负面输入作为读者的练习。 :)


可以处理任何整数输入的完全通用版本将使用通用函数,如下所示:

func fib<T: IntegerType>(n: T) -> T {
switch n {
case 0, 1: return 1
default: return fib(n - 1) + fib(n - 2)
}
}

func fib<S: SequenceType, T : IntegerType where T == S.Generator.Element>(s: S) -> [T] {
return map(s) { n in
return fib(n)
}
}

关于swift - 如何在 Swift 中使用模式匹配重载函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25793819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com