如何解释使用PartialFunction的def?

时间:2015-02-27 06:01:31

标签: scala

我仍然习惯了Scala中PartialFunction的概念。 我发现以下声明无法解决这个问题:

更新     def msgsToGet:PartialFunction [Any,Unit] 在特征中定义如下:

trait MyActorTrait {
    palindrome: String => def msgsToGet: PartialFunction[Any, Unit]
    //After the answers I received, I understand that the "def msgsToGet:      //PartialFunction[Any, Unit]" represents the LHS of an abstract (as yet)     //unimplemented function (no function body yet)

}

现在,这是什么意思? 我知道'def'表示一个功能。在这种情况下,它是一个名为msgsToGet的函数。

然后有一个冒号(:)。好吧,直到现在,我一直认为“结肠后,是类型,这就是我失去的地方。 好的,它是一样的:

def msgsToGet(): PartialFunction[Any, Unit]

[不接受任何参数并返回PartialFunction[Any, Unit]类型的函数。

PartialFunction[Any, Unit]以某种方式向我看起来就像一个返回类型。但是没有功能体。那么这里发生了什么事呢?

对于更长的东西来说这是一种语法糖,但是可读吗?

请帮我解释一下..

2 个答案:

答案 0 :(得分:4)

如果没有函数体,那么它是一个抽象方法。它是在特质还是抽象类?像Java一样,抽象方法表示实现类必须定义方法。

你的分析是正确的:它是一个名为“msgsToGet”的函数,它不带参数并返回PartialFunction[Any, Unit]类型的对象。

以下是一个例子:

trait SomeTrait {
  def msgsToGet: PartialFunction[Any, Unit]
}

class SomeClass extends SomeTrait {
  def msgsToGet: PartialFunction[Any, Unit] = { 
    case x => println(x)      
  } // a case block is a partial function, so we can return this block from the function
}

val c = new SomeClass
val f = c.msgsToGet    // takes no parameters, returns a partial function
f("hey")               // we can call the partial function, which takes an Any parameter
// prints "hey"

答案 1 :(得分:0)

几乎与

相同
def msgsToGet(): PartialFunction[Any, Unit]

Scala允许没有参数列表的方法(而不是一个空参数列表)。

在字节码中,这两个是相同的,但在惯用的Scala中,对于无副作用的方法,特别是访问者,没有参数列表是首选。如果方法是副作用,则首选空参数列表。