当我写:
public func perform() async throws -> Int {
fatalError()
}
public func perform<Output: Decodable>() async throws -> Output {
fatalError()
}
public func doIt() async throws -> Int {
try await perform()
}
一切都好。
但是当我写:
public func perform<Input: Encodable>(body: Input) async throws -> Int {
fatalError()
}
public func perform<Input: Encodable, Output: Decodable>(body: Input) async throws -> Output {
fatalError()
}
public func doIt<Input: Encodable>(body: Input) async throws -> Int {
try await perform(body: body)
}
然后我在try await perform(body: body)
通话中出现“不明确地使用 'perform(body:)'”错误。
我试图理解为什么会这样。我明白了Int
,Decodable
这可能会导致歧义。但是后来我想知道为什么在我的第一个示例中没有发生这种情况。我怀疑引入另一种泛型类型会使候选函数的选择行为不同,即使该类型根本不涉及歧义。
是这样吗 ?作为奖励:有人能指出这个选择过程中涉及的 Swift 文档/源代码的入口点吗?
注意:我不是在寻找解决方法,已经解决了这个问题,我只是想了解底层机制。