首页 > 解决方案 > Scala with Cats 书中这段代码示例中额外的 _ 是什么?

问题描述

我正在阅读此处提供的 Scala with Cats 书:https ://books.underscore.io/scala-with-cats/scala-with-cats.html

书中有一个代码示例,我对此有疑问。

基本上,代码中有一个额外的下划线,我不明白它的用途。是拼写错误,还是下划线有什么作用?

import cats.Monoid
import cats.instances.int._        // for Monoid
import cats.instances.invariant._  // for Semigroupal
import cats.instances.list._       // for Monoid
import cats.instances.string._     // for Monoid
import cats.syntax.apply._         // for imapN

case class Cat(
  name: String,
  yearOfBirth: Int,
  favoriteFoods: List[String]
)

val tupleToCat: (String, Int, List[String]) => Cat =
  Cat.apply _

val catToTuple: Cat => (String, Int, List[String]) =
  cat => (cat.name, cat.yearOfBirth, cat.favoriteFoods)

implicit val catMonoid: Monoid[Cat] = (
  Monoid[String],
  Monoid[Int],
  Monoid[List[String]]
).imapN(tupleToCat)(catToTuple)

我指的是 tupleToCat 类的定义。Cat.apply 后下划线的作用是什么?

标签: scalafunctional-programmingscala-cats

解决方案


在 scala lambda 函数(或tupleToCat您的示例中的匿名函数)中,_充当该函数的参数列表的名称。所以在这种情况下Cat.apply _意味着调用Cat.apply所有参数传递给tupleToCat.

下划线比这更强大。请参阅此处了解更多信息


推荐阅读