`
zk_chs
  • 浏览: 214794 次
  • 性别: 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
分享到:
评论

相关推荐

    scala 隐式转换与隐式参数的使用方法

    Scala 隐式转换与隐式参数的使用方法 Scala 中的隐式转换与隐式参数是两个非常重要的概念,它们可以帮助开发者编写更加简洁、灵活和可维护的代码。本文将详细介绍 Scala 中隐式转换与隐式参数的使用方法,并通过...

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

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

    scala隐式.docx

    Scala是一种强大的函数式编程语言,它的特色之一就是对隐式参数和隐式转换的支持。在Scala中,隐式参数和隐式转换极大地增强了代码的简洁性和可读性,同时也为类型系统提供了更大的灵活性。 **隐式参数**: 在Scala...

    scala中的隐式类型转换的实现

    如果在同一作用域里,对同一源类型定义一个以上的隐式转换函数,如果多种隐式转换函数都可以匹配,那么编译器将报错。 四、隐式类型转换的应用 隐式类型转换可以广泛应用于实际开发中,例如,在进行数学运算时,...

    Scala 专题教程 - 隐式变换和隐式参数-内含源码以及设计说明书(可以自己运行复现).zip

    隐式变换是Scala中的一种特殊转换机制,它允许开发者在不显式调用转换函数的情况下,自动将一个类型的值转换为另一种类型。这通常发生在类型不匹配时,如果存在一个合适的隐式转换,编译器会尝试自动应用这个转换。...

    Scala函数式编

    Scala的隐式转换允许在不显式调用转换方法的情况下,将一个类型的对象转换为另一种类型。这对于函数式编程来说非常有用,因为它可以让不同数据类型之间的操作更加流畅。 尾递归优化 Scala支持尾递归优化,即当递归...

    Scala—— 12.隐式转换

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

    scala高级特性

    隐式转换和隐式参数是 Scala 中两个非常强大的功能,利用隐式转换和隐式参数,你可以提供优雅的类库,对类库的使用者隐匿掉那些枯燥乏味的细节。 概念 隐式转换是指那种以 implicit 关键字声明的带有单个参数的...

    快学Scala课后习题答案

    10. **隐式转换**:Scala的隐式转换可以将一种类型自动转换为另一种类型,当需要某类型但实际提供的是另一种类型时,隐式转换可以发挥作用。 这个"快学Scala课后习题答案集合"资源将帮助学习者核对自己的解答,理解...

    Scala - Implicit Conversion.docx

    以下是关于Scala隐式转换的详细说明: 1. **隐式转换定义(implicit def)**: 隐式转换通常通过`implicit def`定义,它看起来像一个函数,但会被编译器自动应用在适当的地方。例如: ```scala object ...

    1、scala面试题(25问).pdf

    Scala语言中的隐式转换函数是指那种以implicit关键字申明的带有单个参数的函数,这样的函数会被自动应用,将值从一种类型转换为另一种类型。 7. 伴生类和伴生对象 在Scala语言中,单例对象与类同名时,该对象被...

    scala实战高清讲解

    - 隐式转换:Scala允许隐式参数和隐式转换,有助于代码简洁性,但需谨慎使用以避免混淆。 - 类型推断:Scala具有强大的类型推断能力,允许编写更少的类型声明,提高代码可读性。 - 泛型:泛型提供了一种方式来...

    Scala函数式编程 2016年4月 电子工业出版

    很抱歉,您提供的文件内容...- 隐式转换:允许在程序中自动地将一种类型的值转换成另一种类型。 如果可以提供更多有关书籍的具体内容,我将能够更准确地解释和扩展这些概念,以提供一个超过1000字的详细知识点介绍。

    Spark从入门到精通Java版

    Scala的隐式转换特点是,支持隐式转换函数、隐式参数等。隐式转换函数可以将一种类型转换为另一种类型,隐式参数可以自动将参数传递给函数。 Actor编程 Actor是一种编程模型,用于并发编程。Scala的Actor编程特点...

    Effective Scala中文版

    7. **隐式转换与上下文绑定**:Scala的隐式转换和上下文绑定是其一大特色,它们可以用来解决类型转换的繁琐和简化API。但隐式转换需要谨慎使用,防止引入难以调试的问题。 8. **对象与模块化**:Scala中的对象和...

    scala入门精华讲义

    3. 隐式转换:Scala支持隐式转换,允许在特定上下文中将一个类型转换为另一个类型,提高代码的简洁性。 三、函数式编程概念 1. 高阶函数:如前所述,函数可以作为一等公民,可以赋值给变量、作为参数或返回结果。 ...

    Scala第十四章节1

    在Scala编程语言中,隐式转换和隐式参数是两个强大的特性,它们允许程序员以简洁和优雅的方式扩展已有类的功能。在本章中,我们将深入探讨这两个概念,并通过实例了解如何使用它们。 首先,隐式转换(Implicit ...

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

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

    fp-scala:Scala 中的函数式编程

    10. **隐式转换**:Scala的隐式转换允许在特定上下文中,将一个类型自动转换为另一种类型,这在实现通用功能时非常有用。 11. **类型系统**:Scala的强类型系统和类型推断使得代码更安全,同时提供了许多高级特性,...

    functional programming in scala and impatient.pdf

    同时,你会掌握Scala的特质(traits)、隐式转换、类型推断等高级特性,这些都使得Scala在构建大规模、模块化的应用程序时表现出色。 总之,通过学习《Functional Programming in Scala》和《Scala for the ...

Global site tag (gtag.js) - Google Analytics