1. 程式人生 > >scala 高級十八 scala隱式方法,隱式參數的實現和使用

scala 高級十八 scala隱式方法,隱式參數的實現和使用

spa 高級 隱式轉換 end 參數 代碼量 true 列表標記 extends

摘要:

通過隱式轉換,程序員可以在編寫Scala程序時故意漏掉一些信息,讓編譯器去嘗試在編譯期間自動推導出這些信息來,這種特性可以極大的減少代碼量,忽略那些冗長,過於細節的代碼。 使用方式: 1.將方法或變量標記為implicit 2.將方法的參數列表標記為implicit 3.將類標記為implicit

隱式方法:

package smart.iot

import java.io.File
import scala.io.Source


class concealFunc(f:File) {
  
  def GetTxt=Source.fromFile(f.getPath).mkString
  def SayHello=println("hello world!")
}

//隱式轉換
object Context
{
  implicit def file(f:File)=new concealFunc(f)
}

object concealFunc
{
  def main(args: Array[String]): Unit = {
   //引用上面定義的隱士方法  
   import Context._
   var txt=new File("d:/218/a.txt")
   //實現隱式轉換的方法,擴展了 File 的功能
   println(txt.GetTxt)
   txt.SayHello
  }
     
   
}

隱式參數,自動推斷參數類型

object genericvar
{
//隱式參數
def syaHello(msg:String)(implicit name:String)=println(msg+name)
//隱式參數之 擴中 類型
def min[T](x:T,y:T)(implicit s:T=>Ordered[T])=if(x<y) x else y
}


object gener
{
implicit var name:String="james"
}

object generic
{

def main(args: Array[String]): Unit = {
import gener._

genericvar.syaHello("hello")
var value=genericvar.min(1, 2)
println(value)
}

result:
hello james
1

隱式類的實現

package smart.iot


class implicitClass {
  
  def smat=println("smat steps")
}


object common
{
   implicit class extendsclass(obj:implicitClass)
   {
     def func1=println("test A")
     def func2=println("test B")
   }
}

object implicitClass
{
  def main(args: Array[String]): Unit = {
    import common._
    var imp=new implicitClass;
    
    imp.smat;
    imp.func1
    imp.func2
    
  }
}

scala 高級十八 scala隱式方法,隱式參數的實現和使用