Scala 函数式编程_偏函数_Partial Functions
Scala 函数式编程_偏函数_Partial Functions
秋风醉了 发表于3年前
Scala 函数式编程_偏函数_Partial Functions
  • 发表于 3年前
  • 阅读 49
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: Scala 函数式编程_偏函数_Partial Functions

Scala 函数式编程_偏函数_Partial Functions


偏函数_Partial Functions

偏函数是只对函数定义域的一个子集进行定义的函数。 scala中用scala.PartialFunction[-T, +S] 类来表示。

比如,对给定的输入参数类型,偏函数只能接受该类型的某些特定的值。一个定义为(Int) => String 的偏函数可能不能接受所有Int值为输入。

如下定义一个偏函数,这个函数只会接收 1 和 2 ,这两个输入。其他输入会报错。

val one: PartialFunction[Int, String] = {
  case 1 => "one"
  case 2 => "two"
}

println(one.isDefinedAt(1))

println(one.isDefinedAt(2))

println(one(1))
println(one(2))

运行并输出,

true

true

one

two

isDefinedAt表示 这个参数是否在函数的定义域中,否则抛出异常。

如下,

...........

...........

false

scala.MatchError: 3 (of class java.lang.Integer)

        at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:253)

        at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:251)

再来看一个例子,

val signal: PartialFunction[Int, Int] = {
  case x if x > 1 => 1
  case x if x < -1 => -1
}

println(signal(1212))
println(signal(-74567))
println(signal(0))

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft>scala PartialFunction.scala

1

-1

scala.MatchError: 0 (of class java.lang.Integer)

        at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:253)


使用 orElse 组合函数

使用 orElse 组合函数

val one: PartialFunction[Int, String] = {
  case 1 => "one"
}
val two: PartialFunction[Int, String] = {
  case 2 => "two"
}
val three: PartialFunction[Int, String] = {
  case 3 => "three"
}
val wildcard: PartialFunction[Int, String] = {
  case _ => "something else"
}

val partial = one orElse two orElse three orElse wildcard

println(partial.isDefinedAt(4))
println(partial(4))

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft>scala PartialFunction.scala

true

something else

=============END=============

共有 人打赏支持
粉丝 215
博文 609
码字总数 434222
×
秋风醉了
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: