2017-07-05 77 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

相關問題