scala高階語法之柯里化(curring)和 隱式轉換(implicit)
阿新 • • 發佈:2018-11-09
柯里化(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的值