回答
有了必要的风格,你可以写(如你在Java中这样做):
var t = 0
while(true) {
t+=1
...
}
懒功能,这可能是:
def ints(n: Int = 0): Stream[Int] = Stream.cons(n, ints(n+1))
ints().map(t => ...)
使用内置函数:
Iterator.from(0).map (t => ....)
这种无限结构的常见用例是采取无限流或迭代器,执行一些操作然后取结果数:
Iterator.from(0).filter(t => t % 1 == 0).map(t => t*t).take(10).toList
据我所知在Scala中'Int'没有'++'方法,你应该写't + = 1'而不是't ++'。 – Jesper
@Jesper yep,修正,非常感谢 –
我会使用'foreach'而不是'map',因为后者会创建一个新的集合,所以会吃内存,特别是如果你在做什么是无限的,比如'Iterator从0 foreach {t => ...}'。 –
正如我在评论中提到的那样,您的问题似乎没有多大意义 - 请添加更多详细信息。
目前,最接近的斯卡拉翻译我能想出是:
Stream from 0
这比OP的代码做得更多。我建议'while(true)':) –
一个简单的斯卡拉理解看起来大多是这样的:
for (i <- 0 until 10) {
// do some stuff
}
我不建议让人们用for-understand作为for循环的替代品。 – ziggystar
我同意你的看法,但我认为这可能是他可以从头开始的事情。 –
我没有看到问题;使用while循环似乎是不成熟的优化。 (* Scala *中的编程指的是for表达式,没有'yield'作为“for-loops”,所以看起来他们打算用于这种情况。) –
您可以使用,而或为。
您可以使用
for(i<-0 to 100) {
println(i)
}
,或者你使用,当你想通过N多
for(i <- 5 until 55 by 5) {
println(i)
}
递增,直到或者您更好地使用,而
var i = 0
while(true) {
...
i+=1
}
或还做 - 而
var i = 0
do {
...
i += 1
} while(true)
看一看:http://www.simplyscala.com/ 和自己
也测试一下,在我的博客,我做了大约势在必行Scala的一些帖子,我用于和while循环,你可以去看看那里。
- 1. Java来斯卡拉转换
- 2. 斯卡拉Java转换
- 3. Java <->斯卡拉收集转换,斯卡拉2.10
- 4. 斯卡拉:包装上的Java地图后,斯卡拉转换
- 5. 转换JSON来斯卡拉对象
- 6. 转换斯卡拉表达对Java 1.8
- 7. 斯卡拉地图转换
- 8. 斯卡拉Bitset toBitMask转换
- 9. 转换类型斯卡拉
- 10. 嵌套的Java HashMap来嵌套斯卡拉地图转换
- 11. 如何转换用java斯卡拉集合转换
- 12. 转换RDF4J流过滤器(拉姆达?)从Java到斯卡拉
- 13. 斯卡拉转化序列与未来
- 14. 将Java HashMap来斯卡拉地图
- 15. 斯卡拉 - 隐式类型转换
- 16. 转换为net.liftweb.json.JsonAST.JObject提升斯卡拉
- 17. 转换JsValue斯卡拉Play2到模型
- 18. 斯卡拉转换2个字符集
- 19. 转换JSON字符串在斯卡拉
- 20. 转换斯卡拉的foreach到.MAP
- 21. 转换列表中斯卡拉
- 22. 转换斯卡拉ArrayBuffer到迭代器
- 23. 斯卡拉:转换地图案例类
- 24. 斯卡拉方式转换长ArrayByte
- 25. 实现转换参数,以斯卡拉
- 26. 斯卡拉多个隐式转换?
- 27. 斯卡拉案例类转换
- 28. 斯卡拉隐式类型转换和==
- 29. 斯卡拉地图案例类转换
- 30. 斯卡拉 - 仿制药+隐式转换
这没有意义。你所呈现的Java代码是无限循环的头部声明,它从零开始向上计数变量't'。但你遗漏了循环的主体。你的循环应该做什么?什么时候会停止? – Madoc
奇怪的是,我认为这是在Scala中比在Java中更自然的东西 - 在Scala中,您可以将它作为迭代(或映射或其他)写在包含自然数的无限集合上。 –