学点什么
Scala的语法真是让人又爱又恨,非常好用,用上就会上瘾,就是非常不好理解,特别是对向我这种码农大叔更是如此。
Scala的For Loop
就是如此,跟Java比大不相同,我们一起来看看
Crazy Scala ForLoop
Crazy 1 - 无关 For Loop
scala的这个变量定义就很抓狂, 只要包在``内, 啥都能是val
/**
* Crazy 1 - 无关 For Loop
* scala的这个变量定义就很抓狂, 只要包在``内, 啥都能是val
*/
private val `>=a AND <=c` = 'a' to 'c'
private val `>=1 AND <3` = 1 until 3
Crazy 2 - 多个变量可以一块 For Loop
/**
* Crazy 2 - 多个变量可以一块 For Loop
* Loop出个笛卡尔
*/
for {
i <- `>=a AND <=c`
j <- `>=1 AND <3`
} {
println(s"$i, $j")
}
// 或者这样写
for (i <- `>=a AND <=c`; j <- `>=1 AND <3`) {
// println(s"$i, $j")
}
/* --- 结果 ---
a, 1
a, 2
b, 1
b, 2
c, 1
c, 2
*/
Crazy 3 - For Loop内还可以加条件
/**
* Crazy 3 - For Loop内还可以加条件
*/
for {
i <- `>=a AND <=c`
if i != 'b'
j <- `>=1 AND <3`
} {
println(s"$i, $j")
}
/* --- 结果 ---
a, 1
a, 2
c, 1
c, 2
*/
Crazy 4 - For Loop 还可以 yield
/**
* Crazy 4 - For Loop 还可以 yield
*/
private val charWithNumSeq = for {
i <- `>=a AND <=c`
if i != 'b'
j <- `>=1 AND <3`
} yield {
s"$i$j"
}
println(charWithNumSeq)
/* --- 结果 ---
Vector(a1, a2, c1, c2)
*/
学习总结
我已经不再会写Java程序了, 经常有“提笔忘字”的感觉
完整代码
package ddu.scala.articles
object CrazyForLoop extends App {
/**
* Crazy 1 - 无关 For Loop
* scala的这个变量定义就很抓狂, 只要包在``内, 啥都能是val
*/
private val `>=a AND <=c` = 'a' to 'c'
private val `>=1 AND <3` = 1 until 3
for {
i <- `>=a AND <=c`
} {
println(s"$i")
}
/* --- 结果 ---
1
2
3
*/
/**
* Crazy 2 - 多个变量可以一块 For Loop
* Loop出个笛卡尔
*/
for {
i <- `>=a AND <=c`
j <- `>=1 AND <3`
} {
println(s"$i, $j")
}
// 或者这样写
for (i <- `>=a AND <=c`; j <- `>=1 AND <3`) {
// println(s"$i, $j")
}
/* --- 结果 ---
a, 1
a, 2
b, 1
b, 2
c, 1
c, 2
*/
/**
* Crazy 3 - For Loop内还可以加条件
*/
for {
i <- `>=a AND <=c`
if i != 'b'
j <- `>=1 AND <3`
} {
println(s"$i, $j")
}
/* --- 结果 ---
a, 1
a, 2
c, 1
c, 2
*/
/**
* Crazy 4 - For Loop 还可以 yield
*/
private val charWithNumSeq = for {
i <- `>=a AND <=c`
if i != 'b'
j <- `>=1 AND <3`
} yield {
s"$i$j"
}
println(charWithNumSeq)
/* --- 结果 ---
Vector(a1, a2, c1, c2)
*/
}