Scala零基础教学61-80

Posted sunrunzhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala零基础教学61-80相关的知识,希望对你有一定的参考价值。

第61讲:Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析

 

第62讲:Scala中上下文界定内幕中的隐式参数与隐式参数的实战详解及其在Spark中的应用源码解析

/**
  * Scala中上下文界定内幕中的隐式参数与隐式参数的实战详解及其在Spark中的应用源码解析
  */
//[T: Ordering] 这种写法 说明存在一个隐式类型Ordering[T]
class Pair_Implicits[T: Ordering](val first: T, val second: T){
  //声明一个隐式类型对象传入函数
  def bigger(implicit ordered: Ordering[T]) = {
    if (ordered.compare(first, second) > 0) first else second
  }
}

class Pair_Implicitly[T: Ordering](val first: T, val second: T){
  def bigger =
  /**
    *   在Predef中定义了implicitly一个方法 可以简化上面的写法
    *   @inline def implicitly[T](implicit e: T) = e
    *   不使用implicit的隐形类型转换
    */
    if (implicitly[Ordering[T]].compare(first, second) > 0) first else second
}

class Pair_Implicitly_Ordereded[T: Ordering](val first: T, val second: T) {
  def bigger = {
    import Ordered._
    if (first > second) first else second
  }
}

object Context_Bounds_Internals {

  def main(args: Array[String]): Unit = {
    println(new Pair_Implicits(7, 9).bigger)
    println(new Pair_Implicitly(7, 9).bigger)
    println(new Pair_Implicitly_Ordereded(7, 9).bigger)

  }
}

  

 第63讲:Scala中隐式类代码实战详解

import java.io.File

import scala.io.Source

object Context_Helper{  
    implicit class FileEnhancer(file : File){    
        def read = Source.fromFile(file.getPath).mkString  
    }
    implicit class Op(x:Int){
         def addSAP(second: Int) = x + second
    }
}
object Implicits_Class {

  def main(args: Array[String]){
    import Context_Helper._
    println(1.addSAP(2))
    println(new File("F:\1.txt").read)
    
  }
  	
}

第64讲:Scala中隐式对象代码实战详解

abstract class Template[T] {
      def add(x: T, y: T): T
    }
abstract class SubTemplate[T] extends Template[T] {
      def unit: T
    }
//执行过程检查当前作用是否有 implicit object 限定的 类型为 SubTemplate 的对象,
// 如有,则选取此对象。
object Implicits_Object {

  def main(args: Array[String]) {
	  implicit object StringAdd extends SubTemplate[String] {
        override def add(x: String, y: String) = x concat y
        override def unit: String = ""
      }
      implicit object IntAdd extends SubTemplate[Int] {
        override def add(x: Int, y: Int) = x + y
        override def unit: Int = 0
      }
      //含有隐式参数,m是隐式对象部分
      def sum[T](xs: List[T])(implicit m: SubTemplate[T]): T =
        {println(xs,m)
        if (xs.isEmpty) m.unit
        else m.add(xs.head, sum(xs.tail))}

      println(sum(List(1, 2, 3, 4, 5)))
      println(sum(List("Scala", "Spark", "Kafka")))
    
  }

}

  

运行结果:

(List(1, 2, 3, 4, 5),[email protected])
(List(2, 3, 4, 5),[email protected])
(List(3, 4, 5),[email protected])
(List(4, 5),[email protected])
(List(5),[email protected])
(List(),[email protected])
15
(List(Scala, Spark, Kafka),[email protected])
(List(Spark, Kafka),[email protected])
(List(Kafka),[email protected])
(List(),[email protected])
ScalaSparkKafka












以上是关于Scala零基础教学61-80的主要内容,如果未能解决你的问题,请参考以下文章

阿里云天池 学习赛汇总(教学赛,零基础入门,长期赛)

Ubuntu零基础教学-Ubuntu硬件时间与系统时间竟然不一致,一段代码教你重新做人!

Ubuntu零基础教学-Ubuntu20.04安装Git及使用,并上传代码至gitlab服务器 | 超级详细,建议收藏!

Ubuntu零基础教学-Ubuntu20.04安装Git及使用,并上传代码至gitlab服务器 | 超级详细,建议收藏!

一篇文搞懂webpack[零基础教学+手把手带你搞项目]

❤️《算法和数据结构》小白零基础教学,三十张彩图,C语言配套代码,之 二叉树详解❤️(建议收藏)