大数据——Scala隐式参数、隐式函数和隐式类及示例演示

Scala隐式参数、隐式函数和隐式类及示例演示

隐式参数

方法可以具有隐式参数列表,由参数列表开头的implicit关键字标记

  • implicit只能修改最尾部的参数列表,应用于其全部参数
  • Scala可自动传递正确类型的隐式值
  • 通常与柯里化函数结合使用
def sum(x:Int)(implicit y:Int)=x+y
implicit var a=10	//将作为Int类型隐式值自动传递
sum(10)	//20

示例

object test {
object test {
  def main(args: Array[String]): Unit = {
    implicit var a:Int=10
    implicit var b:String="hello"
    def test1(a:Int,b:Int)(implicit c:Int):Int={
      a+b+c
    }
    def test2(a:Int,b:Int)(implicit c:Int=5,str:String):Int={
      println(str)
      a+b+c
    }
    println(test1(10,10))
    println(test1(10,10)(20))
    println(test2(10,10)(30,"hi"))
  }
}
//优先级:传参>隐式参数>默认

结果展示:
在这里插入图片描述

隐式函数

隐式函数也称隐式转换,使用implicit修饰的函数
应用场景

  • 类型转换
implicit def double2Int(x:Double)=x.toInt
val i:Int=3.5
  • 类型增强
implicit def bool2Int(x:Boolean)=if(x) 1 else 0
println(1+true)

示例

object test {
  def main(args: Array[String]): Unit = {
    implicit def doubleToInt(value1:Double)=value1.toInt
    implicit def stringToInt(value2:String)=Integer.parseInt(value2)
    var value1:Int=3.5
    var value2:String="1"
    println(value1)
    println(value2)
  }
}

结果展示:
在这里插入图片描述

隐式类

隐式转换

  • 隐式转换、隐式函数
  • 隐式类:用implicit关键字修饰的类,其主构造器可用于隐式转换

只能在类、Trait、对象(单例对象、包对象)内部定义
构造器只能携带一个非隐式参数
隐式类不能是case class
在同一作用域内,不能有任何方法、成员或对象与隐式类同名

隐式类应用

为String对象增加新的方法

object Stringutils {
  implicit class StringImprovement(val s:String){//隐式类
  def increment=s.map(x=>(x +1).toChar)
  }
}
object Main extends App{
  import Stringutils._
  println("mobin".increment)	//输出:npcjo
}

示例

隐式类的使用,与Demo相关的隐式类要全部在Impliciteg中
创建好Demo对象中,虽然Demo中没有一个方法,但是因为隐式类中是有好多方法的,所以Demo对象后就可以使用这些方法
隐式类的主要作用就是:类对象中没有的方法可以直接被类对象调用

Impliciteg

package packagetwo

object Impliciteg {
//类的主构造器
implicit class a(demo: Demo){
  def jia(a:Int,b:Int):Int={
    a+b
  }
  def jian(a:Int,b:Int):Int={
    a-b
  }
  def chen(a:Int,b:Int):Int={
    a*b
  }
  def chu(a:Int,b:Int):Int={
    a/b
  }
}
}

Demo

package packagetwo

import packagetwo.Impliciteg._

class Demo {

}
object Demo{
  def main(args: Array[String]): Unit = {
    val dm=new Demo
    var jiaResult=dm.jia(10,10)
    var jianResult=dm.jian(10,10)
    var chenResult=dm.chen(10,10)
    var chuResult=dm.chu(10,10)
    println(jiaResult)
    println(jianResult)
    println(chenResult)
    println(chuResult)
  }
}

结果展示:
在这里插入图片描述

一、Scala核心编程课程简介 近年来随着大数据的兴起,大数据核心框架Spark和Kafka也受到到广泛关注, Spark底层是Scala实现的, 因此也带火了Scala语言,目前Scala被全球知名公司(如:谷歌、百度、阿里、Twitter、京东等)广泛用于Spark开发。新一代的物联网时代到来,会对大数据应用人才的需求越加紧迫。 尚硅谷网罗和整合了学员很喜爱的师资,打造出专注于Spark开发的Scala课程,我们讲解Scala核心编程技术,同时也讲解编程思想、设计模Scala底层实现,让您有豁然开朗的感受。 二、课程内容和目标 本课程重点讲解Scala核心编程,内容包括: Scala语言概述、运算符、程序流程控制、数据结构之集合、Map映射、过滤、化简、折叠、扫描、拉链、视图、并行集合、高阶函数函数柯里化、偏函数参数推断、控制抽象、Trait、面向对象编程、异常处理、惰性函数、Akka及Actor模型、Spark Master和Worker通讯、转换、参数、工厂模、单例模、观察者模、装饰者模、代理模、泛型、上下界、视图界定、上下文界定、协变逆变不变和源码剖析。通过系统全面的学习,学员能掌握Scala编程思想和Scala底层机制,为进一步学习Spark打下坚实基础。 三、谁适合学 1.希望以较低的投入和风险,来了解自己是否适合转型从事Spark开发的求职人员。 2.有一定的Java基础,或者自学过一些Java书籍与视频资料,想系统掌握Scala语言的程序员。
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页