Scala學習(一),Scala學習(

來源:互聯網
上載者:User

Scala學習(一),Scala學習(
1. Scala變數

a. 變數,使用關鍵字 "var"。常量使用關鍵字"val"

b. 變數型別宣告:

var VariableName : DataType [=  Initial Value]
或
val VariableName : DataType [=  Initial Value]
2. Scala 存取修飾詞

    private:帶有此標記修飾的成員僅在包含了成員定義的類或對象內部可見,同樣的規則還適用於內部類。

class Outer{    class Inner{    private def f(){println("f")}    class InnerMost{        f() // 正確        }    }    (new Inner).f() //錯誤}

    protected:比Java要嚴格一些,只允許在定義了該成員的類的子類中被訪問。

3. Scala 函數

    Scala 函數定義格式如下:

def functionName ([參數列表]) : [return type] = {   function body   return [expr]}

    函數式變成是scala語言的核心,主要分為函數傳名調用、指定函數參數名、函數-可變參數、遞迴函式、預設參數值、高階函數、內嵌函數、匿名函數、偏應用函數、函數柯裡化

3.1 函數傳名調用
函數的形參從 paraName:Type 變成 paraName: =>Type,表示在傳入改參數時不計算,在正真調用的時候再計算。結果表明,fun3在調用前會先去計算fun1的值。
object ScalaApp {  def fun1():Long = {    println("fun1")    return System.currentTimeMillis();  }  def fun2(t: =>Long )={     //函數傳名調用    println("fun2")    println(t)  }  def fun3(t:Long)={         //函數傳值調用    println("fun3")    println(t)  }  def main(args: Array[String]): Unit = {    fun2(fun1)    println("--------------")    fun3(fun1)  }}

輸出結果:

fun2
fun1
1490334605854
--------------
fun1
fun3
1490334605854

3.2 指定參數名
object Test {   def main(args: Array[String]) {        printInt(b=5, a=7);   }   def printInt( a:Int, b:Int ) = {      println("Value of a : " + a );      println("Value of b : " + b );   }}
3.3 可變參數

    Scala 通過在參數的類型之後放一個星號(*)來設定可變參數(可重複的參數)

3.4 閉包

    閉包是一個函數,傳回值依賴於聲明在函數外部的一個或多個變數。

    如一個匿名函數:val bifun = (t:Long) => t*10,下面函bifun就是一個閉包,可以通過訪問函數外面的變數。

var param = 10val bifun = (t:Long) => t*param

 

4. 基本類型和操作4.1 對象相等

     == 不僅僅對基本類型有效,對列表也有效

     List(1,2,3) == List(1,2,3)

 

5. 類和對象5.1 從構造器

    有些時候一個類需要多個構造器,Scala裡主構造器之外的構造器被稱為從構造器

class A(para_a:Int,para_b:AnyVal) {  private val a = para_a;  def this()=this(0,0)       //從構造器  def fun():Int = {    return 1  }}
5.2 定義操作符
class A{  def + (a:Int): Unit ={    }}
6. 使用try處理異常
def fun() ={    try{      throw new NullPointerException("")    }catch{      case ex:NullPointerException => ex.printStackTrace()      case ex:Exception => ex.printStackTrace()    }  }

關於finally,在Java裡,如果finally子句中包含一個顯式返回語句,或拋出一個異常,那麼這個傳回值會淩駕於之前try代碼塊或catch子句產生的Exception之上。如:

def  f():Int = try{return 1}finally{return 2}  //調用f()產生的結果值是2。相反:

def g():Int = try{1}finally{2} //調用g()產生的結果值是1

所以,還是盡量避免在finally中包含傳回值。

7. match運算式
val str = "ab"    str match {      case "a" => println("is a")      case "b" => println("is b")    }
8. 柯裡化(Curry)

def sum(x:Int, y:Int) = x + y

def curriedSum(x:Int)(y:Int) = x + y    //柯裡函數

>: curriedSum(1)(2)

這裡你調用柯裡函數curriedSum,你實際上調用了兩個傳統函數。第一個函數調用帶單個名為x的Int參數,並返回第二個函數的函數值。第二個函數帶Int參數y。下面名為first的函數實質上執行了curriedSum函數的第一個傳統函數會做的事情:

def first(x:Int) = (y:Int) => x+y     //curriedSum的第一個函數返回的是一個函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.