scala中的部分函数

scala中的部分函数,scala,partialfunction,Scala,Partialfunction,我在几个地方看到了下面描述Scala中分部函数使用的代码 val divide: PartialFunction[Int, Int] = { case d: Int if d != 0 => 42 / d } 这里,divide是一个变量,其类型为PartialFunction[Int,Int],这是一个特征。我对RHS部分感到困惑。由于变量“divide”的类型是:PartialFunction[Int,Int],因此需要使用“new”关键字对其进行实例化。我不确定这是哪种语法

我在几个地方看到了下面描述Scala中分部函数使用的代码

val divide: PartialFunction[Int, Int] = {
    case d: Int if d != 0 => 42 / d
}
这里,divide是一个变量,其类型为PartialFunction[Int,Int],这是一个特征。我对RHS部分感到困惑。由于变量“divide”的类型是:PartialFunction[Int,Int],因此需要使用“new”关键字对其进行实例化。我不确定这是哪种语法。另外,上面是如何自动定义isdefined()函数的?(isDefined()似乎可用;但它隐藏在那里)


有人能帮忙吗。

在案例中,右边是函数文字

它是一个文本,就像
Int
Char
String
在文本前面没有
new
关键字一样

cases中的函数具有以下语法

{
  case ... => ...
  (optionally more cases)
}
预期的类型必须是完全已知的。如果需要
PartialFunction
,则将其视为PartialFunction。否则,它将被视为
函数1


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

右侧是案例中的函数文本

它是一个文本,就像
Int
Char
String
在文本前面没有
new
关键字一样

cases中的函数具有以下语法

{
  case ... => ...
  (optionally more cases)
}
预期的类型必须是完全已知的。如果需要
PartialFunction
,则将其视为PartialFunction。否则,它将被视为
函数1


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

对象不必使用
new
实例化,编译器可以直接为文本(
0
“Hello”
)创建对象,或者在创建函数时创建对象(这只是
函数
类的实例)。在这种情况下,它使用该语法创建
部分函数
的实例。对象不必使用
新建
进行实例关联,编译器可以直接为文本(
0
“Hello”
)创建对象,或者在创建函数时创建对象(这只是
函数
类的一个实例)。在本例中,它使用该语法创建了
部分函数
的一个实例。我不认为它必须是
函数1
-afaik,它还可以扩展为具有多个参数的函数。感谢您的响应!我尝试执行以下操作…val x={case\u=>“Nothing”}ad我得到了错误…“缺少扩展函数的参数类型…”是的,我忘记了,如果期望的类型是完全已知的,则只能使用函数文本。
val x:Any=>String={case}\uu=>“Nothing”}
将工作我还有一个问题。.当我编写时,val x=Int=>Int={case x=>2*x}或者val x:Int=>Int=2*.\u两者都有效。但是当我这样做时:val y:PartialFunction[Int,Int]={case x=>2*x}或者val y:PartialFunction[Int,Int]=2*.\n只有第一种情况有效。第二种情况出错。请您帮忙。尽管输入类型通过PartialFunction[Int,Int]的声明是隐式的.
2*.
仅被解析为
函数
文本,从未被解析为
部分函数
文本。只有案例中的文本被解析为部分函数文本(如果需要并且参数类型完全已知)。我不认为它必须是一个
函数1
-afaik它也可以扩展为一个具有多个参数的函数。感谢您的响应!我尝试执行以下操作…val x={case\u=>“Nothing”}并且我收到了错误…“扩展函数缺少参数类型…”是的,我忘了,只有在预期类型完全已知的情况下,才能使用函数文本。
val x:Any=>String={case\u=>“Nothing”}
会起作用。我还有一个问题。当我写的时候,val x=Int=>Int={case x=>2*x}或val x:Int=>Int=2*。。这两种方法都有效。但是当我这样做的时候:val y:PartialFunction[Int,Int]={case x=>2*x}或val y:PartialFunction[Int,Int]=2*\只有第一种情况有效。第二种情况出错。请您帮忙。尽管输入类型通过PartialFunction[Int,Int]的声明是隐式的.
2*.
仅被解析为
函数
文字,从未被解析为
部分函数
文字。只有案例中的文字被解析为部分函数文字(如果需要并且参数类型完全已知)。