2012-05-08 324 views
1

我努力学习Scala的,所以任何人都可以告诉我如何转换成阶以下:转换Java来斯卡拉

for (int t = 0; true; t++) 

预先感谢您。

+3

这没有意义。你所呈现的Java代码是无限循环的头部声明,它从零开始向上计数变量't'。但你遗漏了循环的主体。你的循环应该做什么?什么时候会停止? – Madoc

+1

奇怪的是,我认为这是在Scala中比在Java中更自然的东西 - 在Scala中,您可以将它作为迭代(或映射或其他)写在包含自然数的无限集合上。 –

回答

19

有了必要的风格,你可以写(如你在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 
+1

据我所知在Scala中'Int'没有'++'方法,你应该写't + = 1'而不是't ++'。 – Jesper

+0

@Jesper yep,修正,非常感谢 –

+0

我会使用'foreach'而不是'map',因为后者会创建一个新的集合,所以会吃内存,特别是如果你在做什么是无限的,比如'Iterator从0 foreach {t => ...}'。 –

8

正如我在评论中提到的那样,您的问题似乎没有多大意义 - 请添加更多详细信息。

目前,最接近的斯卡拉翻译我能想出是:

Stream from 0

+1

这比OP的代码做得更多。我建议'while(true)':) –

2

一个简单的斯卡拉理解看起来大多是这样的:

for (i <- 0 until 10) { 
    // do some stuff 
} 
+1

我不建议让人们用for-understand作为for循环的替代品。 – ziggystar

+0

我同意你的看法,但我认为这可能是他可以从头开始的事情。 –

+2

我没有看到问题;使用while循环似乎是不成熟的优化。 (* Scala *中的编程指的是for表达式,没有'yield'作为“for-loops”,所以看起来他们打算用于这种情况。) –

4

您可以使用,而或为。

您可以使用

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循环,你可以去看看那里。

http://carlosqt.blogspot.com/search/label/Scala