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

摘要:

通过隐式转换,程序员可以在编写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 james1

隐式类的实现

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

  }
}
时间: 2024-10-29 19:06:51

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

scala 高级十五 scala 高介函数式编程

1.高阶函数主要有两种:一种是将一个函数当做另外一个函数的参数(即函数参数):另外一种是返回值是函数的函数. 2.值函数,我们可以用 var或者val 定义一个参数去接收一个函数叫做值函数 ,格式为 var fun_name=funName _ 上图我们定了一个 add函数有两个参数,返回一个int 类型, 然后用吧定义好的add 函数传值给 fun_add   var fun_add=add _  然后用fun_add(2,7) 去调用函数 3.函数的嵌套 //嵌套函数的使用在函数体再定义一个

scala 高级十六 scala 集合和集合的高级特性 map flatten fllatmap zip reduce zip 等操作

1. scala 的列表List 和集Set 的操作 //Set 和list 差不多,不过 Set 中不允许有重复的元素   var set=scala.collection.mutable.Set[Int]();        //+ 会产生一个新的对象,而不是在set 中动态增加    set.+(1)    //+= 会在原先的set 中动态的增加元素而不是产生一个新的对象.    set.+=(1,2,3)        //这个会输出一个排序以后的 集合 比如 输入 7,4,8,6,1

scala 基础十二 scala apply的使用,工厂方法和单例模式的实现

1. apply 可以用来实现类似于静态的初始化类的实例,请看下面实例 package smart.iot class applyclass { } class A { def apply()=println("hello class A"); } object B { def apply()=println("hello object B"); } object applyRun { def main(args: Array[String]): Unit = {

快学Scala 第十八课 (trait多继承)

trait多继承: trait的继承并不像类拥有相同的含义!在下面这个例子中,如果还是运用类的继承的思想,那么运行结果将是什么也没有. trait Logged { def log(msg: String){ } } trait ConsoleLogger extends Logged { override def log(msg: String){ super.log(msg) } } 但是事实并非如此: trait Logged { def log(msg: String){ println

Scala 第十八讲 高阶函数 从大数据菜鸟走上大师的历程

来自原大数据王家林视频视频 23讲 var triple = (x : Double) => 3 * x //> triple  : Double => Double =     Array(3.14, 1.42, 2.0).map((x : Double) => 3 * x)                                                   //> res0: Array[Double] = Array(9.42, 4.26, 6.0)  

Scala中的Implicit(隐式转换,隐式参数,隐式类)

文章来自:http://www.cnblogs.com/hark0623/p/4196452.html  转发请注明 代码如下: /** * 隐式转换 隐式参数 隐式类 */ //隐式转换 class Implicit(a: A) { def Test: Unit = { println("Implicit") } } class A { } object Implicit { //隐式转换 implicit def a2Implicit(a: A) = new Implicit(a)

scala高级特性-01

目标一:深入理解高阶函数 高阶函数 1.1概念 Scala混合了面向对象和函数式的特性, 我们通常将可以做为参数传递到方法中的表达式叫做函数. 在函数式编程语言中,函数是"头等公民", 高阶函数包含:作为值的函数.匿名函数.闭包.柯里化等等. 1.2作为值的函数(故名思议:函数的值作为返回值) 1.3匿名函数 在scala中,你不需要给每一个函数命名,没有将函数赋给变量的函数叫做匿名函数 由于scala可以自动推断出参数的类型,所以可以写的精简一些 还记的神奇的下划线吗?这才是终结方式

Scala入门到精通——第二十八节 Scala与JAVA互操作

本节主要内容 JAVA中调用Scala类 Scala中调用JAVA类 Scala类型参数与JAVA泛型互操作 Scala与Java间的异常处理互操作 1. JAVA中调用Scala类 Java可以直接操作纵Scala类,如同Scala直接使用Java中的类一样,例如: //在Person.scala文件中定义Scala语法的Person类 package cn.scala.xtwy.scalaToJava class Person(val name:String,val age:Int) //伴

Scala入门到精通——第三十节 Scala脚本编程与结束语

本节主要内容 REPL命令行高级使用 使用Scala进行Linux脚本编程 结束语 1. REPL命令行高级使用 在使用REPL命令行时,有时候我们需要粘贴的代码比较大,而普通的粘贴可能会些一些问题,比如中文粘贴会出现乱码.多行代码粘贴时会出错,此时需要用到REPL的高级功能.在日常开发过程中,我们粘贴多行代码的时候会遇到下列问题: //本意是要粘贴下面两行代码 class Person(val name:String,val age:Int) val p=new Person("摇摆少年梦&q