2016-12-29 29 views
0

這個代碼是在 「scale-exercises.org」 網站警告:在斯卡拉可達代碼REPL

class Car(val make: String, val model: String, val year: Short, val topSpeed: Short) 
class Employee(val firstName: String, val middleName: Option[String], val lastName: String) 

object Tokenizer { 
    def unapply(x: Car) = Some(x.make, x.model, x.year, x.topSpeed) 

    def unapply(x: Employee) = Some(x.firstName, x.lastName) 
} 

val result = new Employee("Kurt", None, "Vonnegut") match { 
    case Tokenizer(c, d) ⇒ "c: %s, d: %s".format(c, d) 
    case _ ⇒ "Not found" 
} 

回報:警告:無法訪問的代碼 情況_⇒ 「未找到」

爲什麼警告代碼?請回復...

回答

2

由於unapply的返回類型是Some,因此Scala知道匹配永遠不會失敗,並且永遠不會失敗。

如果您明確聲明返回類型爲Option,則該警告將消失,但這不會改變case _永遠無法到達的事實。

+0

我不明白。你可以告訴我關於顯式代碼的代碼,因爲類型是Option? –

+0

@이창언您是否明白'case _ =>「找不到」?實際上無法實現?如果不是,你能描述一個你認爲應該達到的情況嗎? – sepp2k

+0

我明白了。這些代碼永遠不會失敗。非常感謝。這是我的錯誤 –