如何对解析为相同基类型的两种类型使用隐式转换?


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

相关内容

  • 没有找到相关文章

最新更新