What does type “_” mean in quick error messages?

Sometimes, when you use generics, I get an error message that refers to "_" as a parameter. It does not seem to be documented. What does it mean?

As an example, I get an error message:

Cannot convert value of type 'JawDroppingFeat<Superhero>' to closure result type 'JawDroppingFeat<_>'

when i try to compile:

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 and Arbitrary types from SwiftCheck and related declarations:

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 }
}

I guess it <_>has something to do with the quick inability to infer a type parameter, not the image of Chris Lattner, blinking at me. But does it have a more accurate (and documented) meaning?

Edit

, Swift , , , null (_), - , ( .map).

+4
2

, .

.map JawDroppingFeat, .

,

 JawDroppingFeat<SuperHero>(subject: x, superpowerUsed: y)
+1

, , . " X Y", , " Y, , , X".

+1

Source: https://habr.com/ru/post/1624584/


All Articles