首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速错误消息中的"_“类型是什么意思?

快速错误消息中的"_“类型是什么意思?
EN

Stack Overflow用户
提问于 2016-01-16 22:09:24
回答 2查看 440关注 0票数 5

偶尔在使用泛型时,我会收到一条错误消息,将"_“作为参数。它似乎没有记录在案。什么意思?

作为示例,我得到了以下错误:

代码语言:javascript
复制
Cannot convert value of type 'JawDroppingFeat<Superhero>' to closure result type 'JawDroppingFeat<_>'

当我尝试编译时:

代码语言:javascript
复制
protocol SuperheroType {
  typealias Superpower
}

struct JawDroppingFeat<Superhero: SuperheroType where Superhero: Arbitrary, Superhero.Superpower: Arbitrary>: Arbitrary {
  let subject: Superhero
  let superpowerUsed: Superhero.Superpower

  static var arbitrary: Gen<JawDroppingFeat<Superhero>> {
    get {
      return Gen.zip(Superhero.arbitrary, Superhero.Superpower.arbitrary)
        .map{ (x: Superhero, y: Superhero.Superpower) in
          JawDroppingFeat(subject: x, superpowerUsed: y)
        }
    }
  }
}

Gen和are类型来自SwiftCheck,相关声明如下:

代码语言:javascript
复制
public struct Gen<A> {
  public static func zip<A, B>(gen1: SwiftCheck.Gen<A>, _ gen2: SwiftCheck.Gen<B>) -> SwiftCheck.Gen<(A, B)>
  public func map<B>(f: A -> B) -> SwiftCheck.Gen<B>
}

public protocol Arbitrary {
  public static var arbitrary: SwiftCheck.Gen<Self> { get }
}

我认为<_>与swift未能推断出类型参数有关,而不是Chris Lattner向我退缩的图像。但是它有没有更精确的(有记录的)含义呢?

编辑

我目前最好的理论是,当Swift无法推断出类型参数时,它不会立即失败,而是分配一个空(_)类型,这会导致在传递不兼容类型(在我的例子中,是传递给.map的参数)的某个点上发生实际的编译错误。

EN

回答 2

Stack Overflow用户

发布于 2016-01-17 01:14:31

这意味着参数的返回值中有不完整的类型信息。

在本例中,.map函数将返回一个您没有指定嵌入式类型的泛型JawDroppingFeat。

我猜你是想写

代码语言:javascript
复制
 JawDroppingFeat<SuperHero>(subject: x, superpowerUsed: y)
票数 1
EN

Stack Overflow用户

发布于 2016-01-17 01:24:54

一般来说,我的经验是这个错误消息似乎是向后构造的。“无法将X类型的值转换为Y”似乎意味着“您提供了Y,但需要的是X。”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34827889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档