2017-04-27 70 views
1

繼赫然啓發question通過關於使用無形的ADT枚舉@TravisBrown,我留下下面的代碼片段:隱式參數:如何在函數簽名中進行編碼?

implicitly[EnumerableAdt[Foo]].values 

我想一個方法中封裝,這樣我不用到每個調用後的.values(這對我來說似乎是一個更清潔的API,那樣)。 但是我似乎無法做到正確。每當我嘗試封裝implicitly[EnumerableAdt[Foo]]時,我都會得到隱式解析錯誤。

我試過,這使得最有意義的我,是,例如:

def imply[T](implicit ev: T):Set[T] = implicitly[EnumerableAdt[T]].values

肯定沒有取得更少意義,我的ev

我不是專家級的編程。

回答

1

如果你看一下implicitly[X]的定義,你可以看到它需要一個在範圍內的X類型的隱式參數。在你的例子中,你有隱含的ev: T在範圍內,這是不夠的呼籲implicitly[EnumerableAdt[T]]!請嘗試以下定義:

def imply[T](implicit ev: EnumerableAdt[T]):Set[T] = ev.values 
+0

非常感謝,它的工作原理! – Yaneeve

相關問題