2014-12-03 84 views
1

我已經定義了一個類,該類中有一個方法試圖使用帶有隱式參數的函數。不幸的是它的失敗編譯Scala函數調用中的隱式函數

class Test { 
    def useImplicit(implicit a: Boolean) = a 
    def getAnswer() = if (useImplicit) println("yes") else println("no") 
} 

object Preferences { 
    implicit val yes = false 
    implicit val no = false 
} 

的問題是,當我去編譯類,試圖測試一下我的錯誤

​​

我不太確定是怎麼回事這裏。我這樣試圖這樣做的原因是我最終想重載hashCode並確定在運行時是否應該運行我的重載版本或調用父實現。如果這是不可能的,我想我可以使類採取隱

回答

1

getAnswer呼籲useImplicit,反而有Test範圍內沒有implicit BooleangetAnswer也將要求implicit參數的工作:

def getAnswer(implicit a: Boolean) = if(useImplicit) println("yes") else println("no") 

另一種方法是使Test需要在實例化implicit,就像你說的。

+0

最終的問題是我想在運行時重寫一個函數。我不能將參數添加到getAnswer方法,因爲它會更改方法簽名,因此不會由調用代碼執行。我剛剛意識到我需要在創建對象時使用特徵並在運行時混合它。 – 2014-12-03 23:43:39