Scala 为什么';t在Try上映射在这种情况下删除Try

Scala 为什么';t在Try上映射在这种情况下删除Try,scala,Scala,我得到一个错误,因为doSomething需要一个Int,但我通过了Try[Int] 我以为在Try上映射会删除它,但它似乎不起作用 我在这里遗漏了什么?帕伦斯在错误的地方。正如Michael Zajac所说,您映射的是选项,而不是Try 固定的: // redis.get(key) returns a Option[A] redis.get(key).map(x => Try(x.toInt)).map(counter => doSomething(counter)) 顺便说一

我得到一个错误,因为doSomething需要一个Int,但我通过了Try[Int]

我以为在Try上映射会删除它,但它似乎不起作用


我在这里遗漏了什么?

帕伦斯在错误的地方。正如Michael Zajac所说,您映射的是
选项,而不是
Try

固定的:

// redis.get(key) returns a Option[A]

redis.get(key).map(x => Try(x.toInt)).map(counter => doSomething(counter))

顺便说一句,你也可以这样写上面的表达式。Try将为您捕获异常

redis.get(key).map(x => Try(x.toInt).map(counter => doSomething(counter)))

您正在映射
选项
,而不是
尝试
。我的第一个映射是选项[A],然后我的第二个映射是尝试,不是吗?您正在将
选项[A]
映射到
选项[Try[Int]
。您希望得到的整个表达式的类型是什么?即使有正确的括号,您也会得到一个
选项[Try[Int]]
,这就是您想要的吗?
Try(redis.get(key).get.toInt)