gpt4 book ai didi

scala - Scala 中的方法与函数和隐式

转载 作者:行者123 更新时间:2023-12-04 07:57:17 25 4
gpt4 key购买 nike

让我们将 def 和等效函数声明为 val:

scala> def optional(x:Int):Option[String] = None
optional: (x: Int)Option[String]

scala> val optional2:(Int)=>Option[String] = (i:Int) => None
optional2: Int => Option[String] = <function1>

现在为什么这不起作用?
scala> List(1).flatMap(optional2)
<console>:9: error: type mismatch;
found : Int => Option[String]
required: Int => scala.collection.GenTraversableOnce[?]
List(1).flatMap(optional2)
^

而这两个呢?
scala> List(1).flatMap(optional)
res4: List[String] = List()

scala> List(1).flatMap(optional2(_))
res5: List[String] = List()

由于 Option 不是 GenTraversableOnce 的子类型,我认为这一定与隐式有关,但我无法弄清楚它到底是什么。我正在使用 Scala 2.9.1。

最佳答案

隐式转换 Option.option2Iterable是什么让 List(1).flatMap(optional)List(1).flatMap(optional2(_))工作。

您的问题可以归结为未获取隐式转换:

scala> val optional2:(Int)=>Option[String] = (i:Int) => None
optional2: Int => Option[String] = <function1>

scala> (optional2(_)): Function[Int, Iterable[String]]
res0: Int => Iterable[String] = <function1>

scala> (optional2): Function[Int, Iterable[String]]
<console>:9: error: type mismatch;
found : Int => Option[String]
required: Int => Iterable[String]

使用下划线时,编译器会尝试键入函数并提供必要的隐式转换。当您只提供 optional2 时,没有适用的隐式转换。

关于scala - Scala 中的方法与函数和隐式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com