`
zk_chs
  • 浏览: 212965 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

scala 隐式转换函数、隐式转换参数

阅读更多

目前的scala相关博客大概只能算一个笔记,方便自己记录,也帮大家查找信息了。

 

首先scala中的隐式转换可以分为隐式函数转换与隐式参数转换两类,下面就来分别说一下自己对这两种模式的理解。

 

1、隐式函数转换,我们先看一段代码:

scala> val x: Int = 3.14
<console>:10: error: type mismatch;
 found   : Double(3.14)
 required: Int
       val x: Int = 3.14
                    ^

在这里,我们并不能给一个Int类型的变量赋一个Double类型的值,scala不支持默认的转换。如果我们想要将这个Double的值转换成Int的话,那么隐式函数转换便能完成这个任务了,我们首先定义一个隐式转换函数:

implicit def double2Int(x: Double): Int = x.toInt // implicit关键字用来声明隐式转换

 

这样一来,我们上面的程序便能成功运行了,如图:

当然,我们还能对这个隐式转换函数进行更多的修改,比如实现floor,ceil等功能

 

2、隐式参数转换,同样看一段代码:

def total(a: Int, b: Int) = a + b
val t = total(3, 0) // 3

 

在这里,我们的total有两个参数,在调用的时候需要传入两个参数才行。但是,有时候我们只需要一个参数就够了,另外一个参数使用一个定义好的值,那么,我们可以为total定义一个隐式参数:

implicit val x: Int = 0 // implicit关键字用来声明隐式转换
def total(a: Int)(implicit b: Int) = a + b // 柯里化
total(3)(0) // 3
total(3) // 3

此时,我们为函数total定义了一个隐式参数b,同样时使用implicit关键字进行隐式转换的声明。

 

通过上述代码,我们看到total(3)(0)与total(3)是相同的,这便是我们的隐式参数转换了,隐式参数转换使我们多了选择,你可以在需要的时候再传入值,此时隐式参数便不会自动传入函数中了。

 

3、总结:

隐式函数转换主要用于方法中参数与实际类型不匹配的情况,另外,当你调用类中不存在的方法时,也会尝试隐式转换。

隐式参数转换则用于可选参数的情况,不想传递参数时,便使用定义的隐式值。

 

 

  • 大小: 52.2 KB
0
2
分享到:
评论

相关推荐

    debugging-scala-implicits-in-intellij:如何在IntelliJ中调试Scala隐式转换和参数

    在IntelliJ中调试Scala隐式 本文档概述了用于静态... 突出显示适当的隐式转换函数。 ALT + ENTER (然后按ENTER选择“显式”)。 执行步骤。 查看无隐式代码 这是不得已的方法:它显示“未散布”的Scala代码,如果您

    Scala—— 12.隐式转换

    隐式转换函数是以implicit关键字声明的带有单个参数的函数,这种函数将会自动应用,将值从一种类型转换为另一种类型。 object boke_demo01 { def main(args: Array[String]): Unit = { //编写一个隐式函数转成 ...

    Scala编程详解 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    Scala编程详解 第19讲-Scala编程详解:类型参数 共13页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    SCALA从入门到精通个人笔记含代码

    目录如下 Scala简介&快速入门 基础语法 变量 数据类型 流程控制 操作符重载 模式匹配 函数式编程基础 ... 隐式转换和隐式值 偏函数 高阶函数 闭包closure 柯里化函数 控制抽象 递归高级 Akka 介绍

    scala课件.zip

    隐式转换和隐式参数.pptx 集合(上)-基本使用.pptx 集合(下)-应用操作.pptx 模式匹配.pptx 函数式编程高级.pptx 泛型 上下界 视图界定 上下文界定 协变逆变不变.pptx AKKA.pptx 韩顺平_Scala语言核心编程.pdf

    Scala编程详解 第21讲-Scala编程详解:Actor入门 共8页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    Scala编程详解 第4讲-Scala编程详解:条件控制与循环 共7页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    Scala编程详解 第14讲-Scala编程详解:面向对象编程之继承 共13页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    Scala编程详解 第13讲-Scala编程详解:面向对象编程之对象 共9页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    Scala编程详解 第12讲-Scala编程详解:面向对象编程之类 共12页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    Scala编程详解 第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    IBAS0742#kaoyan#20.隐式转换1

    20.隐式转换看不懂以下是自己学习网上资料的理解隐式函数表示参数可以不传递,但是要定义一个默认值implicit val name: String = "IBA

    Scala快速入门(适合为学Spark学习Scala的同学)

    scala安装使用、scala基础、scala方法与函数、scala tuple/集合/list/字符串/set/map、、trait特性、模式匹配、隐式转换、样例类、actorModal

    Scala详细总结(精辟版++)

    这是我学习scala时做的笔记,应该比较全面,对于初学...隐式转换、隐式参数 20 类型参数化 21 类型信息 22 集合 23 异常 27 断言、检查 27 包和引用 27 scala I/O 29 Actor和并发 29 GUI编程 31 结合scala和java 32

    Scala学习笔记

    scala 学习笔记 方法 函数 类 对象 特质 推断 注解 编译 隐式转换 尾递归 元组 列表

    快学 scala 中文版 带完整目录

    第21章 隐式转换和隐式参数 L3. 363 21.1 隐式转换 363 21.2 利用隐式转换丰富现有类库的功能 364 21.3 引入隐式转换 365 21.4 隐式转换规则 367 21.5 隐式参数 368 21.6 利用隐式参数进行隐式转换 370 21.7 ...

    Scala程序设计(第2版)

    10.5.1 隐式转换 260 10.5.2 类型定义 262 10.5.3 条件检查方法 263 10.5.4 输入输出方法 263 10.5.5 杂项方法 265 10.6 对象的相等 265 10.6.1 equals方法 266 10.6.2 == 和!=方法 266 ...

    Scala in Depth

    本书由Scala之父作序推荐,深入探讨了Scala里几个较为复杂的领域,包括类型系统的高阶内容、隐式转换、特质的组合技巧、集合、Actor、函数式编程的范畴论等,而且不是干巴巴地讲述语言和库的概念。本书示例丰富,是...

    大数据技术之Scala.pdf

    我的博客中第一章到第十八章的内容 1.Scala 简述 2.Scala 安装与配置 3.Scala 基础 4.控制结构和函数 5.数据结构 6.模式匹配 7.高阶函数 ...15.隐式转换 16.文件和正则表达式 17.高级类型 18.并发编程 Akka

Global site tag (gtag.js) - Google Analytics