当参数化类继承自另一个符合的类时Equatable,==调用超类==.任何人都可以解释为什么会发生这种情况和/或我在这里做错了什么?我相信一个最好的例子说明了我的问题:
public class Foo: Equatable {}
public func ==(lhs: Foo, rhs: Foo) -> Bool { return false }
//Parametrized
public class Bar<T: Equatable>: Foo {
public var bar: T?
public init(barIn: T?) {
self.bar = barIn
}
}
public func ==<T>(lhs: Bar<T>, rhs: Bar<T>) -> Bool { return lhs.bar == rhs.bar }
//Non parametrized
public class Baz: Foo {
public var baz: Int?
public init(bazIn: Int?) {
self.baz = bazIn
}
}
public func …Run Code Online (Sandbox Code Playgroud) overloading class operator-overloading language-lawyer swift
我有以下玩具示例
func identity<T>(a : T) -> T{
return a
}
func applyIdentity<T>(f : T->T, t:T) -> T{
return f(t)
}
applyIdentity(identity, t:1)
Run Code Online (Sandbox Code Playgroud)
这可以顺利进行。但是,一旦我尝试在身份中抛出异常,如下所示:
enum MyError: ErrorType{
case MyErrorFoo
};
func identity<T>(a : T) throws -> T{
if (true) {
return a
} else {
throw MyError.MyErrorFoo
}
}
...
Run Code Online (Sandbox Code Playgroud)
类型检查器在applyIdentity(identity, t:1)呼叫中抱怨消息:
Argument for generic parameter 'T' could not be inferred
Run Code Online (Sandbox Code Playgroud)
知道为什么会发生这种情况吗?