在表达中强调

paw*_*icz 0 scala wildcard scalaz scalaz7

下划线中的下划线意味着什么.这是scalaz7库的片段:

trait Apply[F[_]] extends Functor[F] { self =>
  //...
  def ap[A, B](fa: => F[A])(f: => F[A => B]): F[B]
  //...
  def apF[A, B](f: => F[A => B]): F[A] => F[B] = ap(_)(f)   // <----HERE
  //...
}
Run Code Online (Sandbox Code Playgroud)

使用它的一般规则是什么?

Pét*_*rök 5

在Scala中,下划线通常是通配符.具体来说,它是参数名称的简写.所以lambda表达式ap(_)(f)相当于x => ap(x)(f).

您可以使用_,如果每个参数都只能使用一次作为速记匿名函数的参数(S),以及它们在各自的声明的顺序使用.