gpt4 book ai didi

Swift:调用 SequenceOf 的无参数扩展时缺少参数

转载 作者:行者123 更新时间:2023-11-28 07:16:07 24 4
gpt4 key购买 nike

有人能看出这个错误吗? Playground 坚持认为缺少参数 #2,但没有参数 #1!

代码的目的是计算可等式值的运行次数,并返回由值及其计数组成的元组序列。我对这段代码进行了大量工作,对其进行了优化和改进,直到我非常确定它应该可以工作为止……但是尽管它可以编译,但我无法按照预期的方式调用它。

我调用下面的代码得到的错误是missing argument for parameter #2 in call

extension SequenceOf {
func CountRuns<T: Equatable>() -> SequenceOf<(T, Int)> {
return SequenceOf<(T, Int)>([])
return SequenceOf<(T, Int)> { () -> GeneratorOf<(T, Int)> in
var generator = self.generate()
var previousValue: T?
var start = true
return GeneratorOf<(T, Int)> { () -> (T, Int)? in
var count = 1
var retValue: (T, Int)?
while(true) {
var value = generator.next() as T?
if start {
previousValue = value
start = false
} else if value != nil && value! == previousValue! {
count++
} else {
if previousValue != nil {
retValue = (previousValue!, count)
}
previousValue = value
break
}
}
return retValue
}
}
}
}

println(SequenceOf(y).CountRuns())

Playground execution failed: <EXPR>:327:23: error: missing argument for parameter #2 in call
println(SequenceOf(y).CountRuns())
^

最佳答案

您遇到的问题是,您实际上无法使用进一步专门化泛型子类型的方法来扩展泛型类型。也就是说,您的 countRuns 方法要求 SequenceOf 的通用子类型 TEquatable,但您可以仅在原始类型声明中提供这些约束,而不是在扩展中。

解决方案是将 countRuns 声明为顶级函数,如下所示:

func countRuns<T: Equatable>(s: SequenceOf<T>) -> SequenceOf<(T, Int)> {
return SequenceOf<(T, Int)> { () -> GeneratorOf<(T, Int)> in

// note the change from self.generate() to s.generate() here
var generator = s.generate()

var previousValue: T?
var start = true
return GeneratorOf<(T, Int)> { () -> (T, Int)? in
var count = 1
var retValue: (T, Int)?
while(true) {
var value = generator.next() as T?
if start {
previousValue = value
start = false
} else if value != nil && value! == previousValue! {
count++
} else {
if previousValue != nil {
retValue = (previousValue!, count)
}
previousValue = value
break
}
}
return retValue
}
}
}

println(countRuns(SequenceOf(y)))

这在 this NSHipster article 的末尾进行了(一点)介绍.

关于Swift:调用 SequenceOf 的无参数扩展时缺少参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26156180/

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