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

Scala零基础教学【61-80】

时间:2018-09-30 16:54:54      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:bsp   asp   read   str   second   定义   template   gad   转换   

第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),com.wanji.scala.implicits.Implicits_Object$IntAdd$2$@6b143ee9)
(List(2, 3, 4, 5),com.wanji.scala.implicits.Implicits_Object$IntAdd$2$@6b143ee9)
(List(3, 4, 5),com.wanji.scala.implicits.Implicits_Object$IntAdd$2$@6b143ee9)
(List(4, 5),com.wanji.scala.implicits.Implicits_Object$IntAdd$2$@6b143ee9)
(List(5),com.wanji.scala.implicits.Implicits_Object$IntAdd$2$@6b143ee9)
(List(),com.wanji.scala.implicits.Implicits_Object$IntAdd$2$@6b143ee9)
15
(List(Scala, Spark, Kafka),com.wanji.scala.implicits.Implicits_Object$StringAdd$2$@1936f0f5)
(List(Spark, Kafka),com.wanji.scala.implicits.Implicits_Object$StringAdd$2$@1936f0f5)
(List(Kafka),com.wanji.scala.implicits.Implicits_Object$StringAdd$2$@1936f0f5)
(List(),com.wanji.scala.implicits.Implicits_Object$StringAdd$2$@1936f0f5)
ScalaSparkKafka

Scala零基础教学【61-80】

标签:bsp   asp   read   str   second   定义   template   gad   转换   

原文地址:https://www.cnblogs.com/sunrunzhi/p/9729638.html

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