2017-07-05 44 views
0

下面的Scala代码编译罚款:为什么我不能重用“不应用”不重复的方法签名

val f = (input: String) => Some("result") 
object Extract { 
    def unapply(input: String): Option[String] = f(input) 
} 
val Extract(result) = "a string" 

但是,如果我通过更换提取:

object Extract { 
    def unapply = f 
} 

然后编译失败:

error: an unapply result must have a member `def isEmpty: Boolean 
val Extract(result) = "a string" 
    ^

为什么? def isEmpty: Boolean从哪里来?

+0

我想,我们中的一些人只是喜欢嵌套...如果是Seq [Seq [Seq [Seq [Seq [Int]]]]? – Dima

回答

1

要回答你的第一个问题 - isEmpty来自内部的Option类型。

def unapply = f表示 - 创建一个返回函数的无参数方法。这不是一种方法本身,因此你有一个错误。

,您可以进一步了解Scala中有函数和方法的区别:Difference between method and function in Scala

+0

“这不是一种方法”你是什么意思? '不适用'是; 'f'不是,但它不相关。 –

+0

@AlexeyRomanov我的意思是在这种情况下不适用不是一个f签名的方法。这是一种返回函数的方法 – greenshade

相关问题