上一章我寫了scala基本類型,并且在開頭弄個“黑暗料理”吓唬大家。。。這一章寫scala的循環 for
首先定義一個方法,然後在main方法中運作
1
2
3
4
5
6
7
<code>def</code> <code>for</code><code>_</code><code>1</code><code>=</code><code>{</code>
<code>var</code> <code>greeting </code><code>=</code> <code>"x"</code>
<code>for</code> <code>(i <- </code><code>0</code> <code>until </code><code>10</code><code>) {</code>
<code>println((greeting +</code><code>=</code> <code>i)) </code><code>//無任何傳回值</code>
<code>println(greeting)</code>
<code>}</code>
如果是java語言,我們通常這樣
<code>String greeting=</code><code>"x"</code><code>;</code>
<code>for</code><code>(</code><code>int</code> <code>i=</code><code>0</code><code>;i<</code><code>10</code><code>;i++)</code>
<code>{</code>
<code>System.out.prinln(greeting+=i)</code>
再看看ruby
<code>for</code> <code>i </code><code>in</code> <code>0</code><code>..(args.size - </code><code>1</code><code>)</code>
<code>greeting += args[i] + </code><code>" "</code>
<code>end</code>
繼續說,運作測試,在main方法中測試for_1方法
<code>def main(args: </code><code>Array</code><code>[</code><code>String</code><code>]) {</code>
<code>for_1</code>
到這裡我覺得各位也能發現一些問題(從java程式員角度),我簡單解釋下:
1. 方法的定義
def開頭 有參數加括号,有傳回值,需要标注傳回類型,如
<code>def for_1_2(x:Int):Int={</code>
<code>var</code> <code>m = </code><code>1</code>
<code>println(x)</code>
<code>m</code>
2. 關于特殊符号 <-
<code>1</code><code>. keyword</code>
<code>2</code><code>. Used on </code><code>for</code><code>-comprehensions, to separate pattern from generator</code>
以上是對符号<- 的解釋,意思就是
a. 他是關鍵字
b. 他用于for循環邏輯,用于周遊
下面,我們講看到for循環的幾個變種, 也可能是在spark源碼中遇到次數較多的
第一次變種:
<code>def</code> <code>for</code><code>2</code><code>=</code><code>{</code>
<code>val</code> <code>range </code><code>=</code> <code>0</code><code>.until(</code><code>10</code><code>)</code>
<code>for</code> <code>(i <- range) {</code>
<code>println(i)</code>
第二次變種,加上個參數:
8
9
10
11
12
13
<code>def</code> <code>for</code><code>3</code><code>(args</code><code>:</code> <code>Array[String]){</code>
<code>var</code> <code>greeting </code><code>=</code> <code>""</code><code>;</code>
<code>args.foreach { arg </code><code>=</code><code>></code>
<code>greeting +</code><code>=</code> <code>(arg + </code><code>" "</code><code>)</code>
<code>println(greeting);</code>
<code>//arg是臨時變量</code>
<code>var</code> <code>range </code><code>=</code> <code>0</code><code>.until(</code><code>10</code><code>)</code>
<code>range.foreach { arg </code><code>=</code><code>></code>
第二個特殊符号出現 “=>” 在最後解釋吧
第三次變種,為了下一次變種做鋪墊,我去掉了函數定義:
<code>//在foreach 後面加上了括号</code>
<code>args.foreach ({ arg </code><code>=</code><code>></code>
<code>})</code>
第四次變種:
<code>args.foreach(arg </code><code>=</code><code>> greeting +</code><code>=</code> <code>(arg + </code><code>" "</code><code>))</code>
最後:
回顧這篇文章 幾個比較特殊點
1. unitl
scala.runtime 包下面的RichInt until 方法 用于for循環 舉例
<code>for</code> <code>(i <- </code><code>0</code> <code>until </code><code>10</code><code>) {}</code>
<code>//或者</code>
2. <-
a. 關鍵字
b. 用于周遊
3. =>
<code>2</code><code>. Used </code><code>for</code> <code>function</code> <code>types, </code><code>function</code> <code>literals and </code><code>import</code> <code>renaming</code>
a. 關鍵字
b. 使用者 for函數的類型, 函數文本 和 導入更名。在for裡作用同符号 <- ,導入更名。
4. 函數的定義
<code>def</code> <code>for</code><code>_</code><code>6</code><code>(x</code><code>:</code><code>Int)</code><code>:</code><code>String</code><code>=</code><code>{</code>
<code>var</code> <code>m </code><code>=</code> <code>1</code>
<code>m+</code><code>""</code>
m+"" 是傳回的String
for 文法大概就這樣,入門夠用了
本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/yjplxq/1412530,如需轉載請自行聯系原作者