请问scala偏函数的输入A和输出B可以是多个数据吗?

elizabethxxy
香瓜 03月03日 字数 813

关于scala的偏函数的一个疑问

大家好!我在学习scala的过程中,有如下疑问:

请问scala偏函数的输入A和输出B可以是多个数据吗?

比如[String, Int, ..., Double, Char, ...],其中String, Int, ...都属于输入,Double, Char, ...都属于输出。

下面是我的学习资料中关于偏函数的描述。

偏函数

被包在花括号内没有match的一组case语句是一个偏函数,它是PartialFunction[A, B]的一个实例,A代表输入参数类型,B代表返回结果类型,常用作输入模式匹配,偏函数最大的特点就是它只接受和处理其参数定义域的一个子集。

package cn.itcast.cases

object PartialFuncDemo  {

val func1: PartialFunction[String, Int] = {

case "one" => 1

case "two" => 2

case _ => -1

}

def func2(num: String) : Int = num match {

case "one" => 1

case "two" => 2

case _ => -1

}

def main(args: Array[String]) {

println(func1("one"))

println(func2("one"))

}

}

谢谢!

Programming 编程技术
4 个回复
xWvxYWYxvWx
xWvxYWYxvWxxWvxYWYxvWx 03月03日
loading ...

写了个例子。

【 在 elizabethxxy (谢绝私聊!网上流氓骗子多,小心谨慎!) 的大作中提到: 】

: 关于scala的偏函数的一个疑问

: 大家好!我在学习scala的过程中,有如下疑问:

: 请问scala偏函数的输入A和输出B可以是多个数据吗?

: ...................

elizabethxxy
香瓜 03月03日

谢谢

【 在 xWvxYWYxvWx 的大作中提到: 】

: 写了个例子。

bsxfun
色即是空 03月06日

如果你不是当前工作原因需要学习Scala,建议直接上手Scala 3.0 (aka[url=http://dotty.epfl.ch/]Dotty[/url])。

对于你的问题,可以使用Scala 3.0将会引入的Union Type很好的解决:

[code=scala]

//

scala> val m2m: PartialFunction[String|Int|Double, Char|Int] = {

|   case s: String => s(0)

|   case i: Int => i

|   case d: Double => d.toInt

| }

val m2m: PartialFunction[String | Int | Double, Char | Int] = <function1>

scala> m2m("one")

val res0: AnyVal = o

scala> m2m(1)

val res1: AnyVal = 1

scala> m2m(Nil)    // 注意:这里发生的是*编译错误*,程序会直接编译不通过

1 |m2m(Nil)

|    ^^^

|    Found:    collection.immutable.Nil.type

|    Required: String | Int | Double

[/code]

【 在 elizabethxxy 的大作中提到: 】

: 关于scala的偏函数的一个疑问

: 大家好!我在学习scala的过程中,有如下疑问:

: 请问scala偏函数的输入A和输出B可以是多个数据吗?

: ...................

elizabethxxy
香瓜 03月06日

谢谢

我是自己学,不是工作需要。

【 在 bsxfun 的大作中提到: 】

: 如果你不是当前工作原因需要学习Scala,建议直接上手Scala 3.0 (akaDotty)。

: 对于你的问题,可以使用Scala 3.0将会引入的Union Type很好的解决:

: [code=scala]

: ...................