2012-05-08 224 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