<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    I want to fly higher
    programming Explorer
    posts - 114,comments - 263,trackbacks - 0

        因為游戲要做壓力測試,用scala寫機器人http://www.scala-lang.org/ http://www.ibm.com/developerworks/cn/java/j-scala/ 
        http://download.scala-ide.org/
         Scala程序設計:Java虛擬機多核編程實戰
         Scala編程
       《Programming Scala》
      《Programming in Scala》
        目前參考Scala編程電子版-書籍已購買
      學習方法:首先看一下基礎知識,然后結合robot,遇到不會的地方查詢書籍或者網絡
         關于Scala的函數式編程-
        函數式編程有兩種指導理念,第一種理念是函數是第一類值。在函數式語言中,函數也是值,與整數或字符串處在同一個地位。函
    數可以被當作參數傳遞給其他函數,可以當作結果從函數中返回或保存在變量里。可以在函數里定義其他函數,就好像在函數里定
    義整數一樣。還可以定義匿名函數,并隨意地插入到代碼的任何地方。
     函數式編程的第二種理念是程序的操作應該把輸入值映射為輸出值而不是就地修改數據。如,在Java 和Scala 里,字符串是一
    種數學意義上的字符序列。使用s.replace(';', '.')這樣的表達式替換字符串里的字符會產生一個新的,不同于原字符串s 的對象。換句
    話說就是在Java 里字符串是不可變的,(immutable)而在Ruby 里則是可變的。因此單就字符串來說,Java 是函數式的語言,而Ruby
    不是。不可變數據結構是函數式語言的一塊基石。
         函數式編程第二種理念的另一種解釋是方法不應有任何副作用(side effect)。方法與其所在環境交流的唯一方式應該是獲得
    參數和返回結果。比如Java 里String 類的replace 方法就符合這種說法。它的參數包括一個字符串和兩個字符,返回的是一個新的字
    符串,其中的指定字符都替換成另一個。調用replace 不會有其他的結果。類似于replace 這樣的方法被稱為指稱透明
    (referentially transparent),就是說對于任何輸入來講,都可以用方法的結果替代對它的調用,而不影響程序的語義。

    1.去http://www.scala-lang.org/下載scala發布包,scala-2.9.1.final.zip,解壓,bin目錄下有scala.bat-解釋器批處理文件。學習習Scala 最簡單的方
    法就是使用Scala 解釋器,它是編寫Scala 表達式和程序的交互式“shell”。只要在解釋器里輸入表達式,它就能計算并打印結果值。
    Scala 的交互式shell 就叫做scala。(或者將scala的bin目錄加到path中,然后就可以在cmd中運行scala,輸入scala -version可以查看版本)
    2.Int 類型指代了scala 包的類Int,類Int 的值對應著Java 的int 值。從更廣泛意義上來說,所有的Java 原始類型在scala 包里都有對應的類。
    例如,scala.Boolean 對應著Java 的boolean。scala.Float 對應著Java 的float。在把Scala 代碼編譯成Java 字節碼的時候,Scala 編譯器會
    代以使用Java 的原語類型以便優化性能。
    3.println 函數在標準輸出上打印傳給它的字符串,就跟Java 里的System.out.println 一樣。
    4.Scala 有兩種變量,val 和var。val 類似于Java 里的final 變量。一旦初始化了,val 就不能再被賦值。相反,var 如同Java 里面的非final
    變量,可以在它的生命周期中被多次賦值。
     如scala> val msg = "Hello, world!"
         msg: java.lang.String = Hello, world!
     這個語句引入了msg 作為字符串"Hello, world!"的名字。它的類型是java.lang.String,因為Scala 的字符串是由Java 的String 類實現。
    5.寫明類型標注不但可以確保Scala 編譯器使用你想要用的類型,還可以有助于之后代碼的閱讀。Java 的變量類型寫在名稱之前,相
    反,Scala 的變量類型在其名稱之后,用冒號分隔。
     如:scala> val msg2: java.lang.String = "Hello again, world!"
     在Scala 程序里java.lang 類型的簡化名4也是可見的,
     如:val msg3: String = "Hello yet again, world!"
    由于msg 不是var 類型變量,因此唯一不能做的就是再給它賦值,否則編譯器報錯-error: reassignment to val
     如果需要的是可以被重新賦值的變量,你應該使用var
    在解釋器中跨行輸入語句的話,只要一行行寫進去即可。如果輸到行尾還沒結束,解釋器將在下一行回應一個豎線(按回車即可)。
     scala> val multiLine =
      | "This is the next line."
     如果你發現了一些錯誤而解釋器仍在等著更多的輸入,你可以通過按兩次回車取消掉
     scala> val oops =
      |
      |
     You typed two blank lines. Starting a new command.
    6.函數定義-
     scala> def max(x: Int, y: Int): Int =
     {
      if (x > y) x
      else y
     }
     max: (Int,Int)Int
        函數的定義以def 開始。然后是函數名,本例中是max,跟著是括號里帶有冒號分隔的參數列表。函數的每個參數都必須帶有前綴冒
    號的類型標注,因為Scala 編譯器(以及解釋器,但之后我們將只說編譯器)無法推斷函數的參數類型。在max 參數列表的括號之后
    你會看到另一個“: Int”類型標注。這是max 函數的結果類型(result type)定義。跟在函數結果類型之后的是一個等號和一對包含了函
    數體的大括號。
     Scala 的條件表達式可以像Java 的三元操作符那樣生成結果值。例如,Scala 表達式“if(x > y) x else y”可以與Java 的“(x > y) ? x : y”產
     生同樣的結果。
        函數大括號前的等號可以提示我們,按照函數式編程的風格來看,函數是對能產生值的表達式的定義。
     既不帶參數也不返回有用結果的函數定義:
     scala> def greet() = println("Hello, world!")
     greet: ()Unit
    函數greet()定義之后,解釋器輸出返回greet: ()Unit。“greet”當然是函數名,空白的括號說明函數不帶參數。Unit 是greet 的結果類型,
    指的是函數沒有有效的返回值。Scala 的Unit類型比較類似于Java 的void 類型,而且實際上Java 里返回void 的方法都會被映射為返回
    Unit的Scala 方法。因此結果類型為Unit 的方法,并非是為了得到返回值,而是為了其他的運行效果(side effect)。greet()的例子里,效
    果就是在標準輸出上打印一句話。
     如果想要離開解釋器,輸入:quit 或者:q。
    7.編寫Scala腳本:
     腳本就是一種經常會被執行的放在文件中的句子序列。
     把以下代碼放在hello.scala 文件中:
     println("Hello, world, from a script!")
     然后運行:
     $ scala hello.scala
     于是系統又會輸出:Hello, world, from a script!
    Scala 腳本的命令行參數保存在名為args 的Scala 數組中。Scala 里,數組以零開始,可以通過在括號里指定索引值來訪問數組元素。
    Scala 里數組steps 的第一個元素是steps(0),而不是像Java那樣的steps[0]。
     // 向第一個參數打招呼
     println("Hello, " + args(0) + "!")
     然后運行:$ scala helloarg.scala planet
     這個腳本包含了一條注釋。Scala 編譯器忽略從//開始到行尾截止的以及在/*和*/之間的字符。本例還演示了String 使用+操作符
     的連接。
         注:1.因為現在已經開始編寫腳本了,所以決定采用eclipse的scala插件;org.scala-ide.sdt.update-site。裝上后回彈出Setup
     Diagnostics->修改eclipse.ini中-Xmx和-Xms,默認推薦的Xmx是1024m,不過那樣eclipse可能都無法啟動,failed to create the java virtual
     machine ,因為分配的內存過大。
      2.如何執行腳本:目錄問題。將scala放到c盤,然后將其bin目錄放到path中。然后根目錄中新建一個script目錄,這個目錄用
      來存放執行的一些腳本。若執行這些腳本,則需進入控制臺,cd到script目錄,然后輸入scala命令執行即可。
      3.eclipse開發scala和java差不多,多多嘗試即可。
    8.用while 做循環;用if 做判斷
     var i = 0
     while (i < args.length)
     {
      println(args(i))
      i += 1
     }
     注:請注意Java 的++i 和i++在Scala 里不起作用,要在Scala 里得到同樣效果,必須要么寫成i = i + 1,要么寫成i += 1
     var i = 0
     while (i < args.length)
     {
      if (i != 0)
       print(" ")
      print(args(i))
      i += 1
     }
     println()
     新版本里,print 調用替代了println 調用,這樣參數就可以在同一行里輸出;注意Scala 和Java 一樣,必須把while 或if 的布爾表達式
     放在括號里;盡管Scala 也和Java 一樣用分號分隔語句,但是Scala 的分號經常是可選的,因此你的右小手指可以不用那么累。不
     過如果你喜歡,也可以把所有可選部分都加上。
    9.用foreach 和for 做枚舉
    前一步里寫的while 循環的編碼風格被稱為是指令式(imperative)編程。這種風格常見于Java,C++和C 這些語言,或者逐條執行指
    令,或者循環枚舉,并經常改變不同函數之間的共享狀態。Scala 里允許使用指令式的編程風格,但隨著你對Scala 的深入了解,你
    可能會發現自己逐漸傾向于一種更為函數式(functional)的編程風格。
     函數式語言的主要特征之一就是,函數是第一類結構,而這也正是Scala 的主要特征。舉例來說,另一種更為簡潔的打印每
    個命令行參數的方法是:
     args.foreach(arg => println(arg))
     args.foreach((arg: String) => println(arg))
    這行代碼對args 調用了foreach 方法,并把函數作為參數傳入,在這里是名為arg 的函數文本(function literal)。函數體是println(arg)
     綜上,函數文本的語法構成包含,括號及命名參數列表,右箭頭以及函數體
     (x: Int, y: Int) => x + y

     for (arg <- args)
     println(arg)
    例子中“for”之后的括號包含arg<-args。<-右側的是已經在前面見過的args 數組。<-左側的“arg”,是val 的名稱(不是var)。(這里一
    定是val,因此只寫arg 即可,無需寫成val arg。)盡管arg 可能感覺像var,因為每次枚舉都會得到新的值,但這的確是val,因為它不
    能在for表達式的函數體中被重新賦值。所以,對于args 數組的每個元素,枚舉的時候都會創建并初始化新的arg 值,然后調用執行
    for 的函數體。

    10.下面開始學習robot,遇到不會的問題再查找書籍或網絡

     1.scalac/scala
     2.下載ant http://www.apache.org/dist/ant
     3.Intellij IDEA/netbeans的scala插件/eclipse的scala插件

    1.1 Array -類型參數化數組
     class-類
     Object-Scala不能定義靜態成員,代之定義單例對象(singleton object)
    1.2 -> 左右兩邊代表一個映射關系,類似map的k-v鍵值對
    1.3 trait-特質
    1.4 =>
    1.5 import com.mop.sgz.core.config._
    1.6 Actor 和并發
    1.7_
    1.8 scala中避免使用顯示的return,因為這樣會影響到scala推演返回類型的能力;如-
     def check1() = true
     def check2() : Boolean = return true
     對于使用了return的方法,就需要顯示的提供返回類型,否則會有編譯錯誤

    posted on 2011-12-26 21:07 landon 閱讀(4409) 評論(0)  編輯  收藏 所屬分類: Program
    主站蜘蛛池模板: 四虎影院在线免费播放| 又粗又大又长又爽免费视频| 亚洲欧美日韩综合俺去了| 在线观看免费国产视频| 久久精品乱子伦免费| 无码人妻一区二区三区免费视频| 亚洲av日韩av无码| 亚洲人成无码www久久久| 最近2019中文字幕免费大全5| 亚洲午夜视频在线观看| 直接进入免费看黄的网站| 亚洲精品无码不卡| 亚洲人成电影在线播放| 亚洲国产成人91精品| 国产精品国产自线拍免费软件| 中文字幕精品三区无码亚洲 | 风间由美在线亚洲一区| 亚洲性色成人av天堂| 亚洲精品无码Av人在线观看国产| 成年人在线免费看视频| 午夜福利不卡片在线播放免费| 国产精品一区二区三区免费| 亚洲av无码有乱码在线观看| 亚洲精品视频免费在线观看| 国产亚洲精品精华液| 国产美女亚洲精品久久久综合| 国产精品嫩草影院免费| 亚洲欧洲免费无码| 两个人的视频高清在线观看免费| 亚洲精品无播放器在线播放| 黄色三级三级三级免费看| 亚洲.国产.欧美一区二区三区| 亚洲人成电影院在线观看| 亚洲高清毛片一区二区| 无码毛片一区二区三区视频免费播放 | 一二三四免费观看在线视频中文版| 日韩免费高清视频网站| 亚洲成a人片在线观| 97av免费视频| 亚洲另类春色校园小说| 3344永久在线观看视频免费首页 |