SBinary 和 Scalacheck的一部分库,广泛使用了隐式参数。让人联想起了Haskell(一种函数式编程语言)的编程风格,我真心的希望在Scala中这种编程风格更加广泛。这是一种非常有用的技术。 作为开始如下多重入参(柯里化)的例子:
scala -> def foo(x: Int)(y: Int) = x+y
foo: (x: Int)(y: Int) Int
scala -> foo (1) (2)
ret0:Int = 3
scala> foo(1, 2); :6: error: wrong number of arguments for method foo: (Int)(Int)Int foo(1, 2); ^ scala> foo(1) :6: error: missing arguments for method foo in object $iw; follow this method with `_' if you want to treat it as a partially applied funct ion foo(1) 上面你完全可以用单一函数的入参列表来调用它,但是你必须用不同的语法来调用它(两个挎号) 有一种方式你可以申明最后一个参数为隐式(implicit),不需要显式的传递。语法如下:
scala> def speakImplicitly (implicit greeting : String) = println(greeting) speakImplicitly: (implicit String)Unit scala> speakImplicitly("Goodbye world") Goodbye world scala> speakImplicitly :6: error: no implicit argument matching parameter type String was foud. scala> implicit val hello = "Hello world" hello: java.lang.String = Hello world scala> speakImplicitly Hello world 你可以正常调用,也可以不传参数,系统将从作用域中找到一个被标示为
implicit变量,如果找不到implicit变量,编译的时候将会报错。 隐式变量的查找是强制类型匹配的,下面是一些例子展现:
错误的类型:
scala> def speakImplicitly (implicit greeting : String) = println(greeting) speakImplicitly: (implicit String)Unit scala> implicit val aUnit = (); aUnit: Unit = () scala> speakImplicitly :7: error: no implicit argument matching parameter type String was found. 只有String类型的隐式变量才能够匹配。 错误的泛型:
scala> def speakImplicitly (implicit greeting : String) = println(greeting) speakImplicitly: (implicit String)Unit scala> implicit val hello : Any = "Hello world" hello: Any = Hello world scala> speakImplicitly :7: error: no implicit argument matching parameter type String was found. 隐式参数匹配必须是静态类型,泛型不能够匹配。 多个相同类型的参数:
scala> def speakImplicitly (implicit greeting : String) = println(greeting) speakImplicitly: (implicit String)Unit scala> implicit val foo = "foo"; foo: java.lang.String = foo scala> implicit val bar = "bar"; bar: java.lang.String = bar scala> speakImplicitly :9: error: ambiguous implicit values: both value bar in object $iw of type => java.lang.String and value foo in object $iw of type => java.lang.String match expected type String 系统找到两个隐式参数是相同的类型,将无法识别。 子类可以匹配,
scala> def sayThings (implicit args : List[Any]) = args.foreach(println(_)) sayThings: (implicit List[Any])Unit scala> implicit val nothingNiceToSay : List[Any] = Nil nothingNiceToSay: List[Any] = List() scala> sayThings scala> implicit val hellos : List[String] = List("Hello world"); hellos: List[String] = List(Hello world) scala> sayThings Hello world String作为Any的子类,所以系统可以匹配到
相关推荐
Scala隐式转换和隐式参数.md
主要介绍了scala 隐式转换与隐式参数的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在IntelliJ中调试Scala隐式 本文档概述了用于静态分析IntelliJ中的Scala隐式方法的几种补充方法。 JetBrains提供了的,但不包括有关分析富集对象的说明。 注意:这些快捷方式适用于OSX。 查看隐式转换 突出显示...
1.隐式参数 相当于默认参数 2.隐式转换 如果参数、变量、属性的类型不对,则会按隐式转换方法转换成正确的类型 3.隐式类 x没有某一方法,则把x转换成隐式类,而隐式类刚好有这个方法,则调用隐式类的方法
scala implicit conversion scala implicit conversion scala implicit conversion scala implicit conversion scala implicit conversion
Scala类型参数.md
【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页
主要介绍了scala中的隐式类型转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
隐式转换和隐式参数.pptx 集合(上)-基本使用.pptx 集合(下)-应用操作.pptx 模式匹配.pptx 函数式编程高级.pptx 泛型 上下界 视图界定 上下文界定 协变逆变不变.pptx AKKA.pptx 韩顺平_Scala语言核心编程.pdf
灵活多租户 使用 gradle 构建的光滑多租户示例应用程序
#Scala 中的隐式元编程 {toc} 这是一篇类似教程的简短文本,基于我关于滥用 Scala 的类型推断和隐式解析算法的演讲,以便我们获得一种类似于逻辑编程的编译时类型级元编程。 本教程假设读者对 Scala 语言和泛型有...
【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页
【课程大纲】 第1讲-Spark的前世今生 共12页 第2讲-课程介绍、特色与价值 共13页 第3讲-Scala编程详解:基础语法 共8页 ...第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页
这是我学习scala时做的笔记,应该比较全面,对于初学...隐式转换、隐式参数 20 类型参数化 21 类型信息 22 集合 23 异常 27 断言、检查 27 包和引用 27 scala I/O 29 Actor和并发 29 GUI编程 31 结合scala和java 32
Scala第十四章节章节目标1. 掌握隐式转换相关内容2. 掌握隐式参数相关内容3. 掌握获取列表元素平均值的案例1. 隐式转换和隐式参数介绍隐式转换和隐式参数