Scalar_scala yield

Scalar_scala yield掌握implicit的用法是阅读spark源码的基础,也是学习scala其它的开源框架的关键,implicit可分为:隐式参数隐式转换类型隐式调用函数1.隐式参数当我们在定义方法时,可以把最后一个参数列表标记为implicit,表示该组参数是隐式参数。一个方法只会有一个隐式参数列表,置于方法的最后一个参数列表。如果方法有多个隐式参数,只需一个implicit修饰即可。当调用包含隐式参数的方法是…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

掌握implicit的用法是阅读spark源码的基础,也是学习scala其它的开源框架的关键,implicit 可分为:

  • 隐式参数
  • 隐式转换类型
  • 隐式调用函数

1.隐式参数

当我们在定义方法时,可以把最后一个参数列表标记为implicit,表示该组参数是隐式参数。一个方法只会有一个隐式参数列表,置于方法的最后一个参数列表。如果方法有多个隐式参数,只需一个implicit修饰即可。 当调用包含隐式参数的方法是,如果当前上下文中有合适的隐式值,则编译器会自动为改组参数填充合适的值。如果没有编译器会抛出异常。当然,标记为隐式参数的我们也可以手动为该参数添加默认值。def foo(n: Int)(implicit t1: String, t2: Double = 3.14)

scala > def calcTax(amount: Float)(implicit rate: Float): Float = amount * rate
scala > implicit val currentTaxRate = 0.08F
scala > val tax = calcTax(50000F) // 4000.0

Jetbrains全家桶1年46,售后保障稳定

  • 1
  • 2
  • 3

如果编译器在上下文没有找到第二行代码会报错

2.隐式地转换类型

使用隐含转换将变量转换成预期的类型是编译器最先使用 implicit 的地方。这个规则非常简单,当编译器看到类型X而却需要类型Y,它就在当前作用域查找是否定义了从类型X到类型Y的隐式定义 
例子:

scala> val i: Int = 3.5 //直接报错
加上这句:
scala> implicit def double2Int(d: Double) = d.toInt
再运行,没报错
scala> val i: Int = 3.5  //i=3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.隐式调用函数

隐式调用函数可以转换调用方法的对象,比如但编译器看到X .method,而类型 X 没有定义 method(包括基类)方法,那么编译器就查找作用域内定义的从 X 到其它对象的类型转换,比如 Y,而类型Y定义了 method 方法,编译器就首先使用隐含类型转换把 X 转换成 Y,然后调用 Y 的 method。 
例子:

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 AminalType
    rabbit.wantLearned("breaststroke")         //蛙泳
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

上例中编译器在rabbit对象调用时发现对象上并没有wantLearning方法,此时编译器就会在作用域范围内查找能使其编译通过的隐式视图,找到learningType方法后,编译器通过隐式转换将对象转换成具有这个方法的对象,之后调用wantLearning方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203695.html原文链接:https://javaforall.net

(0)
上一篇 2025年8月10日 下午6:01
下一篇 2025年8月10日 下午6:43


相关推荐

  • 常用Linux日志查看命令

    常用Linux日志查看命令常用 Linux 日志查看命令欢迎关注公众号 程猿薇茑 查看 Web 应用程序的运行日志解决运行时异常 出错是一项基本功 在 Web 程序中我们通过日志系统 比如 log4j 向外部文件 比如 log txt 写入了程序运行时的某些日志 一般都会给日志行头加上 tag 日志输出了程序中约定的一些变量 可能是某个订单号 某条服务码 请求 ID 值等标识 的值 如果哪个订单处理失败了 或者某个服务运行

    2026年3月20日
    2
  • ADRC算法Auto Disturbances Rejection control

    ADRC算法Auto Disturbances Rejection control 自抗扰控制 其中,e=v(t)-y(t)是控制系统参考输入量v(t)与被控对象输出量y(t)之间的差值,kp比例系数,ki积分系数,,kd微分系数优点:1.仅由误差来决定控制2.运算量低,可以以极高的速率运行缺点:1.误差的取法e=v-y,使得初始时刻误差较大,容易造成控制系统快速性和超调的矛盾,比如输入为阶跃信号的时候,会导致误差函数也是一个阶跃信号,对…

    2022年5月16日
    52
  • hyper-v虚拟机安装xp系统网络不通_hyper-v转换vmware

    hyper-v虚拟机安装xp系统网络不通_hyper-v转换vmware下载一个ISO格式的XP系统镜像,把ISO文件设置为虚拟机的光驱,启动虚拟机,会自动从ISO镜像文件启动,创建虚拟机,创建虚拟磁盘VHD,然后加入启动项。打开本系统的磁盘管理,对虚拟磁盘进行格式化,并设置为活动分区(有一个就行)然后启动虚拟机,给虚拟机安装系统,就可以了。我是启动虚拟机后进入PE,然后选择Ghost32装的。如果启动虚拟机鼠标不能动,就点“

    2022年8月16日
    5
  • [网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集[通俗易懂]

    [网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集[通俗易懂]这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。前文分享了Powershell基础入门知识,涉及条件语句、循环语句、数组、函数、字符串操作、注册表访问等。这篇文章将分享Web渗透的第一步工作,涉及网站信息、域名信息、端口信息、敏感信息及指纹信息收集。

    2022年6月16日
    23
  • spring boot profile配置和启动时no active profile set, falling back to default profiles: default的问题

    spring boot profile配置和启动时no active profile set, falling back to default profiles: default的问题目录 1 启动时 noactiveprof fallingbackt default2 多 profile 文件形式 3 多 profile 配置激活 3 1 通过 properties 文件指定 3 2 通过 yml 文档块指定 3 3 通过 configuratio 中的 Programagrum 指定

    2026年3月19日
    2
  • HTTP和HTTPS的区别

     CA认证电子商务认证授权机构(CA,CertificateAuthority),也称为电子商务认证中心,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任HeartbleedHeartbleed漏洞,这项严重缺陷(CVE-2014-0160)的产生是由于未能在memcpy()调用受害用户输入内容作为长度参数之前正确进行…

    2022年4月5日
    72

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号