1. 程式人生 > >scala高階語法之柯里化(curring)和 隱式轉換(implicit)

scala高階語法之柯里化(curring)和 隱式轉換(implicit)

柯里化(curring)和 隱式轉換(implicit)

  • 柯里化(curring)

scala 中 curring 是將一個正常的方法轉換為科裡化的一個過程
把一個引數列表中的多個引數轉換為多個列表
如:①→②

① def m1(a:Int,b:Int)=a+b
② def m2(a:Int)(b:Int) =a+b
  • 隱式轉換(implicit)
object Implicit{
def main(args:Array[String]):Unit={
 
implicit val a:Int=10
def m1(a:Int,b:Int)=a+b
def m2(a:Int)(implicit b:Int)=a+b
 
/*def m2(a:Int)(implicit b:Int=1)=a+b*/ //方法引數列表裡預設隱式值
println(m2(5))
}
}

隱式轉換的注意事項:
①隱式引數值是從上下文環境中尋找,匹配使用implicit修飾的變數,且最多隻有一個,與方法引數列表中隱式型別一致,並使用。
②如果匹配到多個,報錯。
③如果上下文中沒有,則使用方法引數列表中的預設隱式值。
④如果沒有預設值,報錯。
⑤一個引數列表中只能有一個implicit關鍵字,implicit放到最後一個列表中,並修飾該列表中的所有引數,如:

def m2(a:Int)(b:Int)(implicit c:Int,d:Int)

案例

implicitval scala:Int=20
 def m3(a:Int)(b:Int)(implicit c:Int,d:Int)=a+b+c+d
println(m3(5)(5))//結果為 50=5+5+20+20

其中 c,d都從上下文中獲得20的值