码迷,mamicode.com
首页 > 其他好文 > 详细

scala 高级十八 scala隐式方法,隐式参数的实现和使用

时间:2017-07-06 11:21:21      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:file   extend   end   main   var   iot   from   类型   string   

摘要:

通过隐式转换,程序员可以在编写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隐式方法,隐式参数的实现和使用

标签:file   extend   end   main   var   iot   from   类型   string   

原文地址:http://www.cnblogs.com/IChing/p/7125200.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!