0

当我写:

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:)'”错误。

我试图理解为什么会这样。我明白了IntDecodable这可能会导致歧义。但是后来我想知道为什么在我的第一个示例中没有发生这种情况。我怀疑引入另一种泛型类型会使候选函数的选择行为不同,即使该类型根本不涉及歧义。

是这样吗 ?作为奖励:有人能指出这个选择过程中涉及的 Swift 文档/源代码的入口点吗?

注意:我不是在寻找解决方法,已经解决了这个问题,我只是想了解底层机制。

4

0 回答 0