scala - 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 后下划线的作用是什么?
解决方案
在 scala lambda 函数(或tupleToCat
您的示例中的匿名函数)中,_
充当该函数的参数列表的名称。所以在这种情况下Cat.apply _
意味着调用Cat.apply
所有参数传递给tupleToCat
.
下划线比这更强大。请参阅此处了解更多信息
推荐阅读
- python-3.x - 随机采样向量 ARMA 模型
- sql - 在 Spark-SQL 中为 Azure Databricks 创建用户定义(非临时)函数
- ios - 使用 swift 4 从 ios 监听 Firestore 中的实时更新
- android - UPI 隐式意图选择器在红米设备上不起作用
- spring-boot - Spring Boot,获取用于将数据库提取映射到 POJO 的查询
- bash - Bash shellscript 数组元素无序
- c# - 演员词典
到 IReadOnlyDictionary ? - javascript - 呈现可编辑表格的最佳方式
- sql - 如何在 BigQuery 中构建报告的热门转化路径
- android - 清除 sharedViewModel