大数据课程J3——Scala的类定义

news/2024/11/24 8:41:31/

文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州

 ▲ 本章节目的

⚪ 了解Scala的柯里化 Currying;

⚪ 掌握Scala的类定义;

⚪ 掌握Scala的样例类、option类;

⚪ 掌握Scala的隐式转换机制;

一、柯里化 Currying

柯里化(Currying)技术 Christopher Strachey 以逻辑学家 Haskell Curry 命名的(尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的)。它是把接受多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术

案例1

object Demo08 {

  def main(args: Array[String]): Unit = {

    //首先我们定义一个函数:

    def f1(a:Int,b:Int):Int={a+b}

    //现在我们把这个函数变一下形:

    def f2(a:Int)(b:Int)={a+b}

    //那么我们应用的时候,应该是这样用:f2(2)(3),最后结果都一样是5,这种方式(过程)就叫柯里化。

    val r1=f2(2)(3)

    //柯里化实质上会演变成这样一个函数:

    //接收一个参数a,返回一个匿名函数,

    //该匿名函数又接收一个参数b,函数体为a+b

    def f3(a:Int)=(b:Int)=>a+b

    val f4=f3(2)

    //请思考 f4(3)的值是多少?答案是:5

    f4(3)

  }

}

示例2

object Demo09 {

  def f1(a:Int,b:Int,c:Int):Int={a+b+c}

  def f2(a:Int)(b:Int)(c:Int):Int={a+b+c}

  def f3(a:Int)(b:Int,c:Int):Int={a+b+c}

  def f4(a:Int,b:Int)(c:Int):Int={a+b+c}

  def main(args: Array[String]): Unit = {

    //f1f2的函数的体现的是传入三个数,马上得到结果

    f1(1,2,3)

    f2(1)(2)(3)

    //f3函数则可以体现:延迟执行的思想以及固定易变因素的思想

    val r1=f3(1)(2,3)

  }

}

示例3

object Demo10 {

  def f1(a:Int,b:Int,f:(Int,Int)=>Int):Int={f(a,b)}

  def f2(a:Int)(b:Int)(f:(Int,Int)=>Int):Int={f(a,b)}

  def f3(a:Int,b:Int)(f:(Int,Int)=>Int):Int={f(a,b)}

  def f4(a:Int)(b:Int,f:(Int,Int)=>Int):Int={f(a,b)}

  def main(args: Array[String]): Unit = {

    //调用f3

    f3(2,3){(a:Int,b:Int)=>a+b}

    //可简化为下面的形式,我们发现这和scala


http://www.ppmy.cn/news/1036958.html

相关文章

MoCo论文精读

《 Momentum Contrast for Unsupervised Visual Representation Learning》 ---- MoCo 什么是对比学习? 对比学习是一种自我监督学习的范式。将未标记的样本相互对比,通过训练模型,使得属于同一分布的样本在嵌入空间中被推向彼此。 怎样知道那些图片类似,那些不类似呢? …

vue3-router

一、路由 (1)通过 URL 区分路由的机制上,有两种实现方式: hash 模式:通过 URL 中 # 后面的内容做区分,我们称之为 hash-router; history 模式:在这种方式下,路由看起来和…

form表单的entype属性选取

一、上传文件时entype属性值怎么选取? 上传文件的话必须指定form的enctype(encode type,编码类型)属性为multipart/form-data,表示表单数据有多部分组成,既有文本又有文件等二进制数据,指定…

UVM学习知识点

UVM构建 include 和 import pkg区别.sv .svhhdl_top.sv和hvl_top.sv回顾uvm_config,以及自定义uvm_configverilog:parameter、defparam与 localparamtest_basebuild_phaseend_of_elaboration_phasefunction void configure_agentset_seqsend_of_elaboration_phaseuv…

java面试题(16):Mysql一致性视图是啥时候建立的

1 演示错误案例 先给大家来一个错误演示。 我们打开两个会话窗口,默认情况下隔离级别是可重复读,我们来看下: 首先在 A 会话中查看当前 user 表,查看完成后开启事务: 可以看到id3的数据sex是男。 接下来在 B 会话中…

uniapp 小兔鲜儿 - 首页模块(2)

目录 热门推荐 首页 – 热门推荐组件 首页 – 获取热门推荐数据 首页 – 热门推荐数据类型并渲染 猜你喜欢 首页 – 猜你喜欢组件 首页 – 获取猜你喜欢数据 首页 – 猜你喜欢数据类型和渲染 首页 – 猜你喜欢分页准备 首页 – 猜你喜欢分页加载 首页 – 猜你喜欢分…

力扣:63. 不同路径 II(Python3)

题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格中有障碍物。那么从…

周期 角频率 频率 振幅 初相角

周期 角频率 频率 振幅 初相角 当我们谈论傅里叶级数或波形分析时,以下术语经常出现: 周期 T T T: 函数在其图形上重复的时间或空间的长度。周期的倒数是频率。 频率 f f f: 周期的倒数,即一秒内波形重复的次数。单位通常为赫兹&#xff…