gpt4 book ai didi

scala - 为什么可以将 Try[Try[Unit]] 值分配给 Try[Unit]?

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

我刚刚遇到了一个非常奇怪的行为。这是代码:

// So far everything's fine
val x: Try[Try[Unit]] = Try(Try{})
x: scala.util.Try[scala.util.Try[Unit]] = Success(Success(()))

// Compilation error should happen here
val x: Try[Unit] = Try(Try{})
// Wuut ?
x: scala.util.Try[Unit] = Success(())

我期待这里出现编译错误,因为(据我所知) Try[Try[Unit]]不应分配给 Try[Unit] ,但在这种情况下,似乎是 Try{}自动转换为 Unit ( () )。这怎么可能?

最佳答案

任何类型均可适应Unit在正确的上下文中,只需删除该值即可。在这种情况下,表达式解析如下:

val x: Try[Unit] = Try {
Try {}
() // adapting the result to Unit
}

您可以通过传递 -Ywarn-value-discard 使 Scala 编译器针对此类情况发出警告。 .

关于scala - 为什么可以将 Try[Try[Unit]] 值分配给 Try[Unit]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34996284/

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