【发布时间】:2015-03-07 00:21:08
【问题描述】:
这是一个演示我的问题的人造玩具示例:
def sscce(): Int = {
val rand = new Random()
var count = 0
while (true) { // type mismatch; found: Unit, required: Int
count += 1
if (rand.nextInt() == 42) return count
}
}
如何帮助编译器了解此方法将始终返回 Int?
我知道上面的玩具示例可以很容易地重构以完全摆脱无限循环,但我真的希望在我的实际代码中使用无限循环。相信我;)
【问题讨论】:
-
从技术上讲,您的代码不会返回 Int。它返回一个 Int if 该函数完全返回。我怀疑这种区别是问题所在。你想解决什么问题?你说你真的想要一个无限循环,但也许你现实世界的问题可以有另一种解决方案。
-
我真的很喜欢无限循环,但它们需要很长时间才能完成。
-
你不能证明它会一直被执行,因为它不会一直被执行。它通常会被执行,但 scala 不提供
Usually[Int]类型。如果没有更好的方法来代替使用无限循环,我会感到震惊。
标签: scala infinite-loop type-inference return-type