2014-12-25 37 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