【发布时间】:2020-02-12 19:20:07
【问题描述】:
我是 Scala 的新手,我正在尝试解码它的结构,我了解了 pattern matching 并且语法类似于 Java switch 语句
val x: Int = Random.nextInt(10)
x match {
case 0 => "zero"
case 1 => "one"
case 2 => "two"
case _ => "other"
}
这里的代码非常明显且可读。我遇到了partial functions,它们非常明显并且很清楚它们是什么
偏函数是不提供答案的函数 可以给出每个可能的输入值。
我感到困惑的是在部分函数的主体中使用case
像这样:
val divide2: PartialFunction[Int, Int] = {
case d: Int if d != 0 => 42 / d // WHAT IS THIS ?!
}
我不明白在没有match 语句的情况下如何使用case,Scala 是如何解释它的,它是如何读取的,它是一个方法、一个类还是另一个构造?,我还有什么其他方法使用case 而不使用match 声明
编辑:
我试图玩弄这个案例,但仍然不明白。例如
val SomeFun: PartialFunction[Int, Int] = {
case d: Int if d != 0 => 1000 / d
case f: Int if f != 2 => 100 / f
case m: Int if m != 1 => 10 / m
}
这是如何工作的?
尝试这样做会出错
val SomeFun = {
case d: Int if d != 0 => 1000 / d
case f: Int if f != 2 => 100 / f
case m: Int if m != 1 => 10 / m
}
Error:(29, 17) missing parameter type for expanded function
The argument types of an anonymous function must be fully known. (SLS 8.5)
Expected type was: ?
不匹配的大小写是否在偏函数之外的任何其他地方使用?
【问题讨论】:
标签: scala pattern-matching partialfunction