我遇到类似错误似乎不正确的问题。以下代码生成错误: "不能使用类型的参数列表调用baz(f:(A) - >(),g:(String) - >())"如上所示,"不正确" type是baz的确切类型,被称为。
注意:我退出了成功'并且'失败'为了类型清晰,但使用函数作为闭包时会发生同样的事情。
class Foo<A> {
..
func baz(f: (A) -> (), g: (String) -> ()) {
.. do some stuff
}
func bar<A, B>(f: (A -> B)) -> Foo<B> {
func succeed(a: A) -> () {
.. do some stuff
}
func fail(s:String) -> () {
.. do some stuff
}
baz(f: succeed, g: fail)
.. do some stuff
}
}
答案 0 :(得分:1)
为函数A
声明的泛型参数bar
会覆盖为类Foo
声明的泛型类型,您需要将其删除:
class Foo<A> {
func baz(f: (A) -> (), g: (String) -> ()) {}
func bar<B>(f: (A -> B)) -> Foo<B> {
func succeed(a: A) -> () {}
func fail(s:String) -> () {}
baz(succeed, g: fail)
return Foo<B>()
}
}
答案 1 :(得分:0)
这是关于A
协议的内容。我更改并创建了新的F
,因此它可以编译,并且可以在我的操场上运行:
protocol F {
}
class Foo<A> {
func baz(f: (F) -> (), g: (String) -> ()) {
}
func bar<A, B>(f: (A -> B)) -> Foo<B> {
func succeed(a:F) -> () {}
func fail(s:String) -> () {}
baz(succeed, g:fail)
return Foo<B>()
}
}