type JSON = String
type YAML = String
implicit def json2yaml(in:JSON):YAML = "some conversion"
val js:JSON = "some json"
val yml: YAML = js
上面的代码将"一些json"分配给yml。 不使用隐式转换。 这是因为 YAML 和 JSON 都解析为字符串吗? 有没有办法鼓励代码进行转换?
请注意,类型与其别名之间的关系是等价的关系
如果
𝑡
由类型别名type 𝑡 = 𝑇
定义,则𝑡
相当于𝑇
.
这意味着𝑡
和𝑇
在所有情况下都可以互换。当我们定义别名时
type JSON = String
那么String
就不是一个"基本"类型的JSON
,而是JSON
本身。因此
implicit def json2yaml(in: JSON): YAML = "some conversion"
相当于
implicit def json2yaml(in: String): String = "some conversion"
这就是隐式转换不会发生的原因。
与其进行隐式转换(通常不鼓励这样做(,不如考虑这样的扩展方法方法
case class Json(v: String)
case class Yaml(v: String)
implicit class JsonToJaml(json: Json) {
def asYaml: Yaml = Yaml("some conversion which uses ${json.v}")
}
val js: Json = Json("some json")
val yml: Yaml = js.asYaml