scala中隐式转换之隐式值和隐式视图

/**
  * Created by root
  * Description : 隐式值和隐式视图
  */
object ImplicitTest {

  def main(args: Array[String]): Unit = {

    // 隐式值
    implicit val str = "hello"
    def fun(implicit s: String) = println(s)
    fun  // 调用fun函数,编译器发现参数缺省,直接去作用域内查找隐式值,保证隐式值只有一个

    // 隐式视图:隐式转换为目标类型:把一种类型自动转换到另一种类型
    implicit def intToString(a : Int) = a.toString
    implicit def intToByte(a : Int) = a.toByte
    def fun2(s: String) = println(s)
    fun2(100) //调用fun2函数,参数是个整数,编译器发现函数参数类型不一致,直接去作用域内查找符合编译通过的类型

  }

}
时间: 2024-07-30 11:23:30

scala中隐式转换之隐式值和隐式视图的相关文章

Scala入门到精通——第十九节 隐式转换与隐式参数(二)

作者:摇摆少年梦 配套视频地址:http://www.xuetuwuyou.com/course/12 本节主要内容 隐式参数中的隐式转换 函数中隐式参数使用概要 隐式转换问题梳理 1. 隐式参数中的隐式转换 前一讲中,我们提到函数中如果存在隐式参数,在使用该函数的时候如果不给定对应的参数,则编译器会自动帮我们搜索相应的隐式值,并将该隐式值作为函数的参数,这里面其实没有涉及到隐式转换,本节将演示如何利用隐式参数进行隐式转换,下面的代码给定的是一个普通的比较函数: object ImplicitP

scala学习笔记-隐式转换与隐式参数(18)

Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象.通过这些功能,可以实现非常强大,而且特殊的功能. Scala的隐式转换,其实最核心的就是定义隐式转换函数,即implicit conversion function.定义的隐式转换函数,只要在编写的程序内引入,就会被Scala自动使用.Scala会根据隐式转换函数的签名,在程序中使用到隐式转换函数接收的参数类型定义的对象时,会自动将其传入隐式转

Scala入门到精通——第十八节 隐式转换与隐式参数(一)

本节主要内容 隐式转换简介 隐式转换函数 隐式转换规则 隐式参数 1. 隐式转换简介 在scala语言当中,隐式转换是一项强大的程序语言功能,它不仅能够简化程序设计,也能够使程序具有很强的灵活性.要想更进一步地掌握scala语言,了解其隐式转换的作用与原理是很有必要的,否则很难得以应手地处理日常开发中的问题. 在scala语言中,隐式转换是无处不在的,只不过scala语言为我们隐藏了相应的细节,例如scala中的类继承层次结构中: 它们存在固有的隐式转换,不需要人工进行干预,例如Float在必要

隐式转换与隐式参数

Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象.通过这些功能,可以实现非常强大,而且特殊的功能. Scala的隐式转换,其实最核心的就是定义隐式转换函数,即implicit conversion function.定义的隐式转换函数,只要在编写的程序内引入,就会被Scala自动使用.Scala会根据隐式转换函数的签名,在程序中使用到隐式转换函数接收的参数类型定义的对象时,会自动将其传入隐式转

第五篇:你“ 看不见 ” 的隐式转换

前言 对于隐式转换,想必你已经了解了算数转换中的“ 向上对齐 ”的概念:了解了赋值隐式转换的规律( 右值类型转换为左值类型 ).但C++中的隐式转换远不止这些,本文就将告诉你一些容易被忽略,但事实上发生了的隐式转换. 数组转换为指针 在许多情况下,数组都隐式转换为了指针.取数组元素的过程就是根据首元素和元素序号以及元素大小到指定位置取值:数组作为函数参数传递给函数的过程中也转换成了指向首元素的指针.当然,在一些其他的场合,隐式转换未必发生,比如sizeof( 数组 )就不会隐式转换为sizeof

Java基础——隐式转换vs强制转换

在定义变量时,有许多要注意的问题,一不小心就会出现损失精度或者不兼容类型等问题. 例如: 1.定义长整型数据时,必须加后缀l或L long l =123456789012345L 2.定义单精度类型时(7-8位有效数字),必须加后缀 f 或 F float f = 12.5F 3. boolean类型不可以转换为其它的数据类型. 这其中,我们常常会遇到数据类型的转换问题,最为常见的要属隐式转换和强制转换了,我们来分析一下. 隐式转换 特征: 从小到大,可以隐式转换,数据类型将自动提升. byte

JavaScript的数据类型的隐式转换

什么是弱类型语言?计算机语言的类型可以分为强类型和弱类型两种. 二者之间的区别,就在于计算时,不同类型数据是否可以透明的隐式转换.如果一个语言可以隐式转换它的所有类型,那么它的变量.表达式等在参与运算时,即使类型不正确,也能通过隐式转换来得到正确的类型,这样的语言就属于弱类型语言. 与此相对,强类型语言的类型之间不一定有隐式转换. 弱类型相对于强类型来说,类型检查更不严格,比如允许变量类型的隐式转换,允许强制类型转换等等,而强类型语言一般不允许这么做.一.1+"2"+"2&q

Scalaz(1)- 基础篇:隐式转换解析策略-Implicit resolution

在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧.scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成.scalaz typeclass在scala中的应用有赖于scala compiler的一项特别功能:隐式转换(implicit conversion),使程序表述更精简.由于隐式转换是一项compiler功能,在程序编译(compile)的时候是由compiler来进行类型转换代码的产生和替代的. 让我们先了解一下作

(原创)c#学习笔记05--变量的更多内容01--类型转换01--隐式转换

第五章 变量的更多内容 本章内容: ●  如何在类型之间进行隐式和显式转换 ●  如何创建和使用枚举类型 ●  如何创建和使用结构类型 ●  如何创建和使用数组 ●  如何处理字符串值 首先要讨论的主题是类型转换,即把值从一种类型转换为另一种类型. 接着阐述另外一些类型的变量: 枚举——变量类型,用户定义了一组可能的离散值,这些值可以用人们能理解的方式使用. 结构——合成的变量类型,由用户定义的一组其他变量类型组成. 数组——包含一种类型的多个变量,可以以索引方式访问各个数值. 这些类型比前面使