使用中间val和map / flatMap进行隐式转换

时间:2015-09-03 05:13:43

标签: scala

我有这个隐式def来将Option [Int]转换为Option [String]

implicit def optIntOptString(n: Option[Int]): Option[String] = Some(n.get.toString)

虽然这个有效:

val optIntVal: Option[Int] = Some(3) 
val converted: Option[String] = optIntVal // the 'optIntVal' which is of type Option[Int] gets converted implicitly to Option[String] due to the implicit def 'optIntOptString'

这不是:

val failConv: Option[String] = Some(3)
 found   : Int(3)
 required: String
       val failConv: Option[String] = Some(3)

我试图在不使用中间值的情况下进行转换

我的目的是在map / flatmap函数中使用隐式转换,例如:

val someList: List[Int] = List(1, 2, 3)
someList.map((num:Int) => {
  val z:Option[String] = Some(num)
  z
})

但即使使用保存源类型的中间值我也会收到错误,看起来隐式转换在map方法中不起作用:

 found   : Int
 required: String
          someList.map((num:Int) => { val z:Option[String] = Some(num); z })

0 个答案:

没有答案