Scala中的部分函数

问题描述

我在几个地方看到以下代码,这些代码描述了Scala中部分函数的使用。

for(int i = 1; i<intervals.size(); i = prev+1){
           if(intervals[prev][1] >= intervals[i][0] && intervals[prev][0] <= intervals[i][1]){
               if(intervals[prev][1] < intervals[i][1]){
                   intervals[prev][1] = intervals[i][1];
                   intervals.erase(intervals.begin()+i,intervals.begin()+(i+1));
               }
               else{
               intervals.erase(intervals.begin()+i,intervals.begin()+(i+1));
               }
           }else{
               prev++;
           }

在这里,除法是一个变量,其类型是作为特征的PartialFunction [Int,Int]。我对RHS部分感到困惑。由于变量“ divide”的类型为:PartialFunction [Int,Int],因此需要使用“ new”关键字来实例化它。我不确定这是哪种语法。加上上面如何自动定义isdefined()函数? (isDefined()似乎可用;但隐藏在此处)。

有人可以帮忙吗?

解决方法

在某些情况下,右侧是函数文字。

这是一个文字,就像IntCharString在文字前没有new关键字一样。

函数具有语法

{
  case ... => ...
  (optionally more cases)
}

预期类型必须是完全已知的。如果期望PartialFunction,则将其视为PartialFunction。否则,将其视为Function1

对于PartialFunction变体,isDefinedAt由案例的模式定义。