Scala之柯里化和隐式转换

栏目: Scala · 发布时间: 7年前

内容简介:柯里化指将原来接受两个参数的函数变成一个新的接受一个参数的过程。新的函数返回一个以原有第二个参数作为参数的函数。隐式转换和隐式参数是 Scala 中两个非常强大的功能,利用隐式转换和隐式参数,你可以提供优雅的类库,对类库的使用者隐匿掉那些枯燥乏味的细节。隐式的对类的方法进行增强,丰富现有类库的功能。

1. 柯里化

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

scala> val mul = (x: Int, y: Int) => x*y
mul: (Int, Int) => Int = 

 

scala> val mulOneAtTime = 
 (x: Int) => (
 (y: Int) => x*y) 
 // 柯里化
mulOneAtTime: Int => (Int => Int) = 
 
  

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

scala> mulOneTimel(
  6)(
  7)
res1: Int = 
  42
 

2. 隐式转换和隐式参数

2.1. 概念

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

2.2. 作用

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

2.3. 隐式转换函数

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

2.4. 案例

import java.io.File
import 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 Bar implicit class Bar(x: Int) // 错误! val x = 5 implicit class x(y: Int) // 错误! implicit case class Baz(x: Int) // 错误!

以上所述就是小编给大家介绍的《Scala之柯里化和隐式转换》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Master Switch

The Master Switch

Tim Wu / Knopf / 2010-11-2 / USD 27.95

In this age of an open Internet, it is easy to forget that every American information industry, beginning with the telephone, has eventually been taken captive by some ruthless monopoly or cartel. Wit......一起来看看 《The Master Switch》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具