今天作了一個scala的for循環實驗:scala
for(a<- 1 to 3;b<- 1 to 3) { println("a="+a) println("b="+b) }
實驗結果以下:code
a=1 b=1 a=1 b=2 a=1 b=3 a=2 b=1 a=2 b=2 a=2 b=3 a=3 b=1 a=3 b=2 a=3 b=3
有點至關於數學中的組合問題。數學
val n=List(1,2,3,4,5,6,7,8,9,10) for(ns<-n if(ns!=3);if(ns<8)) { println(s"ns=$ns") }
實驗結果以下:it
ns=1 ns=2 ns=4 ns=5 ns=6 ns=7
for循環能夠看成一個變量的返回值,語法格式以下: var retVal=for(x<- list if(condition1);if(condition2);…)yield x 這種for yield循環中不能有執行語句嗎?io
var v = for(j<-n if j!=3; if j<8) yield j for(vv<-v) { println(s"vv=$vv") }
執行結果:for循環
vv=1 vv=2 vv=4 vv=5 vv=6 vv=7
若是代碼以下:編譯
var v = for(j<-n if j!=3; if j<8) { println(j) } yield j
則編譯時出現錯誤,提示‘;'expected but yield foundimport
scala沒有break語句,須要用其它方法來實現,有多種方法,我列出一種:變量
import util.control.Breaks._ val n=List(1,2,3,4,5,6,7,8,9,10) breakable{ for(k<-n) { if(k==5) break else println(k) } }
執行結果:List
1 2 3 4
continue語句也沒有,也須要變通(注意下面代碼中breakable的位置與上面代碼中的不一樣之處):
import util.control.Breaks._ val n = List(1,2,3,4,5,6,7,8,9,10) for(k<-n) { breakable{ if(k==5) break else println(k) } }
執行結果:
1 2 3 4 6 7 8 9 10