我有一个改进的类型定义,如下所示:
type D = String Refined Regex "(a|b)"
我可以在表示值的一行中使用细化,但是出于某种原因,autoRefineV
在Map的上下文中使用时不会选择它,即使类型是显式的。例如:
import eu.timepit.refined.auto.autoRefineV
val test1: D = "a" // this is fine
val test2 = Map[D, String]("a" -> "test") // this fails
val test3: Map[D, String] = Map("a" -> "test") // this also fails
val test4 = Map(test1 -> "test") // this works!
我得到的错误是:
found : (String, String)
required : (D, String)
因此由于某种原因,该值未从字符串自动转换为D
类型吗?我是否需要定义类型Map[D, String]
的精炼对象?我需要使用见证人(我不知道该如何使用)吗?
答案 0 :(得分:3)
您有一个从String
到D
的隐式转换,但是test2/3
的定义将需要一个从(String, String)
到(D, String)
的转换。
val test5 = Map(("a": D) -> "test")
如果您只想一行编写它应该可以工作。