我試圖用Shapeless的Map實作一些東西,但我不確定這是否可行,如果可行,那么我將如何去做。
我想使用 HMap 作為用戶偏好的地圖,其中的值可以是不同的型別。這就是我的意思:
object UserPreferences{
sealed abstract class BooleanPreference
case object IsStudentIsStudent extends BooleanPreference>
case object SubscribedToNot. title">SubscribedToNotifications extends BooleanPreference>
sealed abstract class StringPreference
case object Language extends StringPreference
class UserPreference[K, V]
implicit val booleanPreferenceToBoolean = new UserPreference[BooleanPreference, Boolean]
implicit val stringPreferenceToString = new PartialClientPref[StringPreferenceKey, String] 。
}
后來我把這個地圖作為一個方法的引數:
import UserPreferences._
def someMethod(userPreferences: HMap[UserPreference]) {
val userLanguage = userPreferences(Language)
}
最后一個代碼片段不能編譯。首先它抱怨缺少隱式引數,但當我明確添加stringPreferenceToString時,編譯器表示它需要UserPreference[UserPreferences.Language.type, NotInferredV],但發現UserPreference[StringPreference, String]
uj5u.com熱心網友回復:
你需要將Language拓寬到StringPreference和import userPreferences._。
import UserPreferences._
def someMethod(userPreferences: HMap[UserPreference]) {
import userPreferences._
val userLanguage = userPreferences(Language: StringPreference)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/326154.html
標籤:
