2013-07-21 54 views
0

我正在關注Twitter Scala學校教程,並且遇到了一個問題。在隱式視圖部分,在高級類型here下,它聲明方法可以針對某個類型要求特定種類的證據。隱式視圖參數

它列出了這類證據的3 -

A =:= B A must be equal to B 
A <:< B A must be a subtype of B 
A <%< B A must be viewable as B 

不過,我寫的代碼有語法錯誤,當我嘗試第三種。

這是我的代碼

class ContainerTwo[A](value : A) { 
    // A must be a subtype of Int 
    def addIt(implicit evidence : A <:< Int) = 123 + value 
    // A must be a viewable as a String 
    def printIt(implicit evidence : A <%< String) = println(evidence) // This line reports an error at <%< - "Cannot resolve symbol <%<" 
    // A must be a subtype of a String 
    def doSomethingWithAString(implicit evidence : A <:< String) = println(evidence) 

}

我使用Scala的2.10。我不確定自己是否做錯了什麼,該教程是錯誤的,還是自編寫教程之後Scala發生了變化。

+0

請始終包含* actual *錯誤,請不要簡單描述爲「報告語法錯誤」。 –

回答

4

<%<已棄用,現在大概已刪除,這就是您看到錯誤(這不是語法錯誤)的原因。您可以使用實現了=>同樣的事情,因爲視圖本質上是一個隱函數實例:

def printIt(implicit evidence : A => String) = println(evidence(value)) 

注意,因爲println需要Any類型的參數,該功能可能不會,除非你做它明確適用。如果您使用的方法需要String,那麼編譯器會查找隱式。

+0

謝謝。 println()對我來說只是一個佔位符,我並不打算對它做任何事情。 – Ren