深入理解Scala的隐式转换
scala> def person(implicit name : String) = name //name为隐式参数 person: (implicit name: String)String
scala> person <console>:9: error: could not find implicit value for parameter name: Stringperson^
scala> implicit val p = "mobin" //p被称为隐式值 p: String = mobin scala> person res1: String = mobin
scala> implicit val p1 = "mobin1" p1: String = mobin1 scala> person <console>:11: error: ambiguous implicit values:both value p of type => Stringand value p1 of type => Stringmatch expected type Stringperson^
scala> def foo(msg : String) = println(msg) foo: (msg: String)Unitscala> foo(10) <console>:11: error: type mismatch; found : Int(10) required: String foo(10) ^
scala> implicit def intToString(x : Int) = x.toString intToString: (x: Int)Stringscala> foo(10) 10
class SwingType{def wantLearned(sw : String) = println("兔子已经学会了"+sw) } object swimming{implicit def learningType(s : AminalType) = new SwingType } class AminalType object AminalType extends App{import com.mobin.scala.Scalaimplicit.swimming._val rabbit = new AminalTyperabbit.wantLearned("breaststroke") //蛙泳 }
class SwingType{def wantLearned(sw : String) = println("兔子已经学会了"+sw) }package swimmingPage{ object swimming{implicit def learningType(s : AminalType) = new SwingType //将转换函数定义在包中 } } class AminalType object AminalType extends App{import com.mobin.scala.Scalaimplicit.swimmingPage.swimming._ //使用时显示的导入val rabbit = new AminalTyperabbit.wantLearned("breaststroke") //蛙泳 }
object Stringutils {implicit class StringImprovement(val s : String){ //隐式类def increment = s.map(x => (x +1).toChar)} } object Main extends App{import com.mobin.scala.implicitPackage.Stringutils._println("mobin".increment) }
隐式转换的时机:
1.当方法中的参数的类型与目标类型不一致时
转载于:https://www.cnblogs.com/MOBIN/p/5351900.html
深入理解Scala的隐式转换相关推荐
- 深入理解Scala的隐式转换系统
原文链接:http://www.cnblogs.com/MOBIN/p/5351900.html ---------------------------------------------- 摘要: ...
- scala之隐式转换
目录 0.隐式转换定义 1.函数隐式转换 2.使用隐式转换加强现有类型 3.隐式转换函数的作用域与导入 4.隐式参数 5.隐式转换的发生时机 0.隐式转换定义 实现方式:隐式转换函数接收的参数类型定义 ...
- 大数据Saprk----Spark基础-scala的隐式转换
first Codec **public class Friend {public static void main(String[] args){System.out.println("B ...
- Scala的隐式转换详解
隐式转换是在Scala编译器进行类型匹配时,如果找不到合适的类型,那么隐式转换会让编译器在作用范围内自动推导出来合适的类型. 1.隐式值与隐式参数 隐式值是指在定义参数时前面加上implicit.隐式 ...
- Scala自动隐式转换
底层实现:Scala编译器自动调用了transform方法将5.0转换成Int 在相同作用域内,不能含有多个相同类型的转换规则
- Scala 高阶函数(作为值的函数、匿名函数、闭包、柯里化)+隐式转换和隐式参数...
Scala高级特性 1. 学习目标 1.1. 目标一:深入理解高阶函数 1.2. 目标二:深入理解隐式转换 2. 高阶函数 2.1. 概念 Scala混合了面向对象和函数式的特 ...
- scala学习之旅(十三):隐式转换和隐式参数
文章地址:http://www.haha174.top/admin/article/list 1.引言 scala 提供的隐式转换和隐式参数功能,是非常有特色的功能.是java 等编程语言所没有的功能 ...
- 【Scala】Scala中的模式匹配、类型参数与隐式转换
1.模式匹配 (1)概述 模式匹配是Scala中非常有特色,非常强大的一种功能.模式匹配,其实类似于Java中的swich case语法,即对一个值进行条件判断,然后针对不同的条件,进行不同的处理.但 ...
- scala当中的文件操作、网络请求和隐式转换
scala当中的文件操作.网络请求和隐式转换 文件操作和网络请求 读取文件当中每一行的数据 读取词法单元和数字 读取网络资源.文件写入.控制台操作 读取网络资源 文件写入操作 控制台交互操作 scal ...
最新文章
- JavaScript创建对象的方法
- java主键后四位顺序号_JAVA中取顺序号 (转)
- 【laravel】docker 部署laravel 遇到的问题?
- 双极型adc与stm32_关于STM32 双ADC同步规则转换两路数据的问题?
- 类的带参方法有哪几部分构成?
- 使用Navicat管理MySQL用户
- Npm 恶意包试图窃取 Discord 敏感信息和浏览器文件
- linux修改主机名(不重启)
- Kubernetes 权限管理
- 在 Chrome 浏览器中安装印象笔记·剪藏插件
- 第 1 章 程序员考试简介
- Linux下常用软件大比拼
- Chrome谷歌浏览器安装与配置教程
- cas和saml_结合使用SAML安全令牌和Microsoft Web Services增强功能
- 如何设置苹果Mac菜单栏的时间与日期显示
- 题注中的图一.1变成图1.1
- 六级考研单词之路-十一
- 使用VUE做的个人简历
- 工业交换机的内部组成是什么?
- String类型转Long类型