博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala之柯里化和隐式转换
阅读量:6447 次
发布时间:2019-06-23

本文共 1699 字,大约阅读时间需要 5 分钟。

hot3.png

1. 柯里化

柯里化指将原来接受两个参数的函数变成一个新的接受一个参数的过程。新的函数返回一个以原有第二个参数作为参数的函数。

scala> val mul = (x: Int, y: Int) => x*ymul: (Int, Int) => Int = 
scala> val mulOneAtTime = (x: Int) => ((y: Int) => x*y) // 柯里化mulOneAtTime: Int => (Int => Int) =
scala> mulOneAtTime(6)(7)res0: Int = 42scala> def mulOneTimel(x: Int)(y: Int) = x*y // 简写的柯里化mulOneTimel: (x: Int)(y: Int)Intscala> mulOneTimel(6)(7)res1: Int = 42

2. 隐式转换和隐式参数

2.1. 概念

隐式转换和隐式参数是 Scala 中两个非常强大的功能,利用隐式转换和隐式参数,你可以提供优雅的类库,对类库的使用者隐匿掉那些枯燥乏味的细节。

2.2. 作用

隐式的对类的方法进行增强,丰富现有类库的功能。

2.3. 隐式转换函数

是指那种以 implicit 关键字声明的带有单个参数的函数,这种函数将被自动引用,将值从一种类型转换成另一种类型。

2.4. 案例

import java.io.Fileimport scala.io.Source//隐式的增强File类的方法class RichFile(val from: File) {  def read = Source.fromFile(from.getPath).mkString}object RichFile {  //隐式转换方法  implicit def file2RichFile(from: File) = new RichFile(from)}object ImplicitTransferDemo{  def main(args: Array[String]): Unit = {    //导入隐式转换    import RichFile._    //import RichFile.file2RichFile    println(new File("c://words.txt").read)  }}

注意:

(1) 只能在别的trait/类/对象内部定义。

object Helpers {       implicit class RichInt(x: Int) // 正确!    }    implicit class RichDouble(x: Double) // 错误!

(2) 构造函数只能携带一个非隐式参数。

implicit class RichDate(date: java.util.Date) // 正确! implicit class Indexer[T](collecton: Seq[T], index: Int) // 错误! implicit class Indexer[T](collecton: Seq[T])(implicit index: Index) // 正确!

虽然我们可以创建带有多个非隐式参数的隐式类,但这些类无法用于隐式转换。

(3) 在同一作用域内,不能有任何方法、成员或对象与隐式类同名。这意味着隐式类不能是case class。

object Barimplicit class Bar(x: Int) // 错误!val x = 5implicit class x(y: Int) // 错误!implicit case class Baz(x: Int) // 错误!

 

本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!

 

转载于:https://my.oschina.net/aibinxiao/blog/2995044

你可能感兴趣的文章
JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记4
查看>>
C#技术------垃圾回收机制(GC)
查看>>
【转】eclipse -- the project was not built due to a resource exists with a different case...
查看>>
漫谈并发编程(三):共享受限资源
查看>>
【转】github如何删除一个仓库
查看>>
Struts2输入校验
查看>>
泛型与类型擦除
查看>>
struts2学习笔记--OGNL表达式1
查看>>
android 批量上传图片
查看>>
hdu2089(数位dp)
查看>>
Linux系统编程——进程调度浅析
查看>>
大数据Lambda架构
查看>>
openCV_java 图像二值化
查看>>
状态模式
查看>>
删除CentOS / RHEL的库和配置文件(Repositories and configuraiton files)
查看>>
DJANGO变动库的一次真实手动经历
查看>>
8个基本的引导工具的网页设计师
查看>>
【下载分】C语言for循环语句PK自我活动
查看>>
C语言 后缀自增的优先级详解
查看>>
Salt自动化之自动更新Gitfs-爱折腾技术网
查看>>