我仍然习惯了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]
以某种方式向我看起来就像一个返回类型。但是没有功能体。那么这里发生了什么事呢?
对于更长的东西来说这是一种语法糖,但是可读吗?
请帮我解释一下..
答案 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中,对于无副作用的方法,特别是访问者,没有参数列表是首选。如果方法是副作用,则首选空参数列表。