大数据课程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.mzph.cn/news/44465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java集合底层源码剖析-HashMap扩展

文章目录 LinkedHashMap有顺序的map数据结构概述基本属性构造方法Entry定义put()方法get()方法TreeMap 自定义排序规则的红黑树map数据结构put函数源码get获取函数源码如何保证有序性HashSetHashSet如何去重源码分析LinkedHashSetTreeSetIterator迭代器应对多线程并发修改的fai…

神经网络基础-神经网络补充概念-47-动量梯度下降法

概念 动量梯度下降法(Momentum Gradient Descent)是一种优化算法,用于加速梯度下降的收敛速度,特别是在存在高曲率、平原或局部最小值的情况下。动量法引入了一个称为“动量”(momentum)的概念&#xff0c…

无涯教程-TensorFlow - XOR实现

在本章中,无涯教程将学习使用TensorFlow的XOR实现,在TensorFlow中开始XOR实施之前,看一下XOR表值。这将帮助了解加密和解密过程。 A B A XOR B 0 0 0 0 1 1 1 0 1 1 1 0 XOR密码加密方法基本上用于加密,即通过生成与适当密钥匹配…

W6100-EVB-PICO 做UDP Client 进行数据回环测试(八)

前言 上一章我们用开发板作为UDP Server进行数据回环测试,本章我们让我们的开发板作为UDP Client进行数据回环测试。 连接方式 使开发板和我们的电脑处于同一网段: 开发板通过交叉线直连主机开发板和主机都接在路由器LAN口 测试工具 网路调试工具&a…

【学习笔记】[AGC064D] Red and Blue Chips

神一样的 Kidulthood 考场上就看出来了这道题其实不难,但是祂没时间写了😅 假设最后从底部到顶部的位置序列为 { x i } \{x_i\} {xi​},那么每一步的操作就是固定的 将结论拓展可以得到,如果 x i > x i 1 x_i>x_{i1} xi​…

leetcode-动态规划-32-最长有效括号

题目描述 给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入:s “(()” 输出:2 解释:最长有效括号子串是 “()” 示例 2: 输…

AI代码补全 案例 - 阿里云智能编码插件Cosy

文章目录 Cosy简介Cosy安装Marketplace安装【推荐】离线安装安装效果Cosy功能体验代码智能补全代码示例搜索API搜索自然语言搜索控制台异常搜索优质文档搜索Cosy体验有感参考Cosy简介 阿里云智能编码插件(Alibaba Cloud AI Coding Assistant)是一款AI编程助手,提供代码智能…

对容器、虚拟机和 Docker 的初学者友好介绍

一、说明 如果你是一个程序员或技术人员,你可能至少听说过Docker:一个有用的工具,用于在“容器”中打包,运输和运行应用程序。很难不这样做,这些天它得到了所有的关注 - 来自开发人员和系统管理员。即使是像谷歌、VMwa…

Asrock-Z690-PG-Reptide i5-13600kf电脑 Hackintosh 黑苹果引导文件

硬件配置(需要下载请百度搜索:黑果魏叔) 硬件型号驱动情况主板 Asrock Z690 PG Reptide 处理器i5-13600kf RaptorLake (Undervolted)已驱动内存2x16Gb DDR4 3600 ADATA XPG已驱动硬盘1Tb Netac NV7000 NVME M2 (PCI-e 4.0)已驱动显卡Radeon …

leetcode 125.验证回文串

⭐️ 题目描述 🌟 leetcode链接:https://leetcode.cn/problems/valid-palindrome/ 思路: 这道题只判断字符串中的字母与数字是否是回文。虽然小写大写字母可以互相转换,但是里面是含有数字字符的,所以先统一&#xff…

数据结构——B-树、B+树、B*树

一、B-树 1. B-树概念 B树是一种适合外查找的、平衡的多叉树。一棵m阶(m>2)的B树,是一棵平衡的M路平衡搜索树,它可以是空树或满足以下性质: (1)根节点至少有两个孩子。 (2&#…

Rust: 聊聊AtomicPtr<()>和 *const ()

在Bytes库在github源码&#xff08;https://docs.rs/bytes/1.1.0/src/bytes/bytes.rs.html#94-100&#xff09;有关Bytes的定义中&#xff0c; pub struct Bytes {ptr: *const u8,len: usize, // inlined "trait object"data: AtomicPtr<()>, vtable: &st…

LVS+Keepalived

Keepalived概述&#xff1a; keepalived软件 就是通过vrrp协议实现高可用功能 vrrp通信原理&#xff1a; vrrp就是虚拟路由冗余协议&#xff0c;它的出现就是为了解决静态路由的单点故障vrrp是通过一种竞选的一种协议机制将路由交给某台vrrp路由器vrrp用ip多播的方式【多播地…

常量对象 只能调用 常成员函数

一、遇到问题&#xff1a; //函数声明 void ReadRanFile(CString szFilePath); const CFvArray<CString>& GetPanelGrade() const { return m_fvArrayPanelGrade; } //在另一个文件中调用ReadtRanFile这个函数 const CFsJudConfig& psJudConfig m_pFsDefJu…

PyArmor 一键加密

使用&#xff1a; pyarmor obfuscate main.py 参考&#xff1a;Python代码加密方案_python加密代码_wgr_1009的博客-CSDN博客 一 简介 PyArmor是用于保护Python代码的工具&#xff0c;它可以将Python脚本编译成加密的字节码&#xff0c;以增加代码的保护性。它的主要目的是防…

贪心算法求数组中能组成三角形的最大周长

题目&#xff1a;三角形的最大周长 给定由一些正数(代表长度)组成的数组arr,返回由其中三个长度组成的、面积不为零的三角形的最大周长。 如果不能形成任何面积不为零的三角形&#xff0c;返回0。 分析&#xff1a; 对数组排序&#xff0c;再从大到小选择三个数&#xff0c;再…

亿级短视频,如何架构?

说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常指导大家面试架构&#xff0c;拿高端offer。 前几天&#xff0c;指导一个年薪100W小伙伴&#xff0c;拿到字节面试邀请。 遇到一个 非常、非常高频的一个面试题&#xff0c;但是很不好回答&#xff0…

Java 日期格式(yyyy-MM-dd HH:mm:ss SSS)

常用格式为&#xff1a;yyyy-MM-dd HH:mm:ss 以 2019-12-31 06:07:59:666 时间为例&#xff1a; 字符 含义 Example y&#xff08;小写的y&#xff09; 年 yyyy---->2019 M&#xff08;大写的M&#xff09; 月 MM---->12 d&#xff08;小写的d&#xff09; 一…

速通蓝桥杯嵌入式省一教程:(五)用按键和屏幕实现嵌入式交互系统

一个完整的嵌入式系统&#xff0c;包括任务执行部分和人机交互部分。在前四节中&#xff0c;我们已经讲解了LED、LCD和按键&#xff0c;用这三者就能够实现一个人机交互系统&#xff0c;也即搭建整个嵌入式系统的框架。在后续&#xff0c;只要将各个功能加入到这个交互系统中&a…

单体版ruoyi表格绑定按钮

先需要在表格中添加一个按钮&#xff0c;可以快速操作这条数据的某个0/1状态 表格的列 editFlag是检验用户是否有操作的权限 var editFlag [[${permission.hasPermi(pipayshop:itemCommoidtyInfoCategoryTop:edit)}]]; 绑定状态条 /* 用户状态显示 */function statusTools(…