当前位置: 首页 > news >正文

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

文章作者邮箱: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.lryc.cn/news/136428.html

相关文章:

  • Ribbon:使用Ribbon实现负载均衡
  • 最新最全的~教你如何搭建高可用Lustre双机集群
  • 深入浅出Pytorch函数——torch.nn.init.uniform_
  • 会员管理系统实战开发教程02-H5应用创建
  • 记一次由于整型参数错误导致的任意文件上传
  • spring之Spring Security - 实现身份验证与授权
  • 【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车
  • 【Linux】线程篇Ⅱ:
  • 浅尝OpenResty
  • MySQL分页查询慢怎么办
  • mongodb集群
  • 回归预测 | MATLAB实现WOA-BP鲸鱼优化算法优化BP神经网络多输入单输出回归预测(多指标,多图)
  • 【前端从0开始】JavaSript——循环控制语句
  • 【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接
  • Python学习笔记_进阶篇(四)_django知识(三)
  • 指针(初阶)
  • Flink内核源码解析--Flink中重要的工作组件和机制
  • Linux 压缩解压(归档管理):tar命令
  • spring boot集成mqtt协议发送和订阅数据
  • 【数据库】详解数据库架构优化思路(两主架构、主从复制、冷热分离)
  • el-table 实现动态表头 静态内容 根据数据显示动态输入框
  • Reids 的整合 Spring Data Redis使用
  • 3D数据转换工具HOOPS Exchange概览
  • 【从零开始的rust web开发之路 一】axum学习使用
  • oracle警告日志\跟踪日志磁盘空间清理
  • 【vue】el-table 数据更新后,刷新表格数据
  • AVL——平衡搜索树
  • TCP通信流程以及一些TCP的相关概念
  • PyTorch学习笔记(十七)——完整的模型验证(测试,demo)套路
  • WPF开篇