2014-12-25 38 views
3

使用Scala的 「2.10.4」,我有這樣一個隱含的定義:階隱式返回值的問題

implicit class MyImplicits(val s: S) { 
    def ==>(relation: W):Option[List[S]] = { 
    getRelation(s,relation) 
    } 
} 

時,我想使用它,以下工作正常:

import MyImplicits 
val list1 = s ==>(w) 
val value = list1.get 

但當我寫這個我得到錯誤:

import MyImplicits 
val value = s ==>(w).get 


Error:(56, 67) value get is not a member of MyImplicits 
     val value = s ==>(w).get 
          ^

這個錯誤的原因是什麼,並有無論如何解決它?

回答

4

這是因爲它將get應用於(w)而不是整個表達式。

試試這個:

val value = (s ==>(w)).get 
+0

謝謝,它的工作以這種方式,但就是用一個簡單的方法,這裏的區別? – Omid

+1

區別在於點運算符比'==>'運算符具有更高的優先級,因此它首先被應用。 – Ashalynd

0

由於Ashalynd已經解釋過,期間有更高的優先級比==>運營商。你可以避開它與括號,或者你可以使用get作爲後綴操作符:

val value = s ==> w get