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

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

时间: 2024-10-11 01:30:23

Scala零基础教学【61-80】的相关文章

win 10 开发零基础教学:教你做第一个App—— Hello world

期待已久的win10已经发布了,开发者们现在也可以开发win10 app.如果你是win10 开发的小白,如果你没有接触过app开发,不要怕,今天教大家怎么做一个Hello world应用程序!(此教程适合小白,开发者们请无视!) 1.首先打开vs2015,在文件处点击新建——项目,如图: 选择“通用”——选择“空白应用”,如图并将项目命名为 Hello world,点击确定. 这时候就新建好了我们的一个空白应用程序. 2.首先,我们来认识一下一个空白应用程序的项目组成. 如图所示,点击Main

ES6零基础教学 解析彩票项目

课程目录: 第1章 课程介绍ES6作为最新的JavaScript核心语言标准,成为前端工程师必备的技能之一.本章首先介绍ES6的基本概念及历史背景让大家走近ES6,了解什么是ES6以及学习ES6的必要性:然后会为大家简明扼要的讲述ES6带来了哪些新特性以及这些特性有什么作用....第2章 项目构建工欲善其事必先利其器,本章重点讲述如何使用Gulp.Babel.Webpack做好ES6工程的构建:通过手把手编写gulp脚本完成ES6的自动编译.打包.文件监听.浏览器热更新.模板自动更新.服务热启动

北风网 零基础到数据(大数据)分析专家-首席分析师

详情请交流  QQ  709639943 00.北风网 零基础到数据(大数据)分析专家-首席分析师 00.快速上手JMeter 00.Jmeter 00.2017年Java web开发工程师成长之路 00.R语言速成实战 00.R语言数据分析实战 00.Python+Django+Ansible Playbook自动化运维项目实战 00.Java深入微服务原理改造房产销售平台 00.Python3入门机器学习 经典算法与应用 00.老司机学python篇:第一季(基础速过.机器学习入门) 00.

新书:Scala语言基础与开发实战

大数据科学丛书系列的最新一本<Scala语言基础与开发实战>即将面市,预计月底上架.内容还是不错的,文笔简介,内容实用,值得学.用. 大数据资深培训师王家林新作. 详细介绍大数据开发语言Scala及其在分布式框架Akka和Kafka中的应用. 秉承"实战"类图书特点,解析大量代码的编写操作,具有较强的可操作性,便于读者学习和理解. 算上再过几个月出版的<Spark内核解析及性能调优>,一年时间,大数据科学丛书系列之Spark的小套系基本形成了:从学习Spark的

Android零基础入门第87节:Fragment添加、删除、替换

前面一起学习了Fragment的创建和加载,以及其生命周期方法,那么接下来进一步来学习Fragment的具体使用,本期先来学习Fragment添加.删除.替换. 一.概述 在前面的学习中,特别是动态加载的时候,有提到FragmentManager和FragmentTransaction类,这里先来详细了解一下其到底为何物. 1.FragmentManager 要管理Activity中的Fragments,就需要使用FragmentManager类.通过getFragmentManager()或g

Android零基础入门第61节:滚动视图ScrollView

原文:Android零基础入门第61节:滚动视图ScrollView 前面几期学习了ProgressBar系列组件.ViewAnimator系列组件.Picker系列组件和时间日期系列组件,接下来几期继续来学习常见的其他组件. 一.ScrollView概述 从前面的学习有的同学可能已经发现,当拥有很多内容时屏幕显示不完,显示不全的部分完全看不见.但是在实际项目里面,很多内容都不止一个屏幕宽度或高度,那怎么办呢?那就需要本节学习的ScrollView来完成. 在默认情况下,ScrollView只是

.net实战项目零基础学习视频教程,.net就业课程网络教学

推荐一套从零基础开始学习.net开发的教程,在线上课,不影响正常上班,只需要半年就能让自己成为.net开发工程师的大牛 1.从.NET负基础开始讲起,内容贯穿C#语法基础,新语法特性.网页技术,数据库技术,客户端技术,Winform,WPF,ASP.NET,MVC等众多内容,成体系,所有的内容零基础,讲师手把手教学,在线学习,视频答疑,远程指导,34个企业常见的经典案例,包括了.NE开发技术的方方面面,能够解决企业开发90%的问题.2.课程使用的开发工具及涉及的技术都是最新的如:C#5,MVC5

2017最新大数据零基础视频教程下载

2017零基础大数据就业课程(全网最全,856课时) 课程观看地址:http://www.xuetuwuyou.com/course/181 课程出自学途无忧网:http://www.xuetuwuyou.com 本套课程是风舞烟老师团队历时四个月打造的全网最全的一套大数据就业课程.可以说是完全0编程基础起步,一部到就业!课程分2大模块,14个课程,65章,共计856课时! 课程大纲: 一.Java模块课程 课程一.[大数据必知必会]- Java负基础扫盲篇 01.Java基础语法.变量.数据类

UI设计师零基础入门到精通精品视频教程【155课高清完整版】

[福吧资源网分享]课程是非常完整的,也是非常零基础的,适合任何学员,有需要的可以下载看看!课程目录:第1章 Adobe Photoshop CS6课时1 Adobe Photoshop CS6入门基础 52:24课时2 创建与编辑选区(上) 46:57课时3 创建与编辑选区(下) 48:59课时4 掌握图层与图层组(上) 48:01课时5 掌握图层与图层组(下) 57:35课时6 绘制位图图像(上) 47:46课时7 绘制位图图像(下) 46:37课时8 绘制矢量图形(上) 46:49课时9 绘