隐式转换是一项强大的 Scala 功能,它支持两种常见用例
- 允许用户提供一种类型的参数,就像它是另一种类型一样,以避免样板。
- 在 Scala 2 中,为封闭类提供其他成员(在 Scala 3 中被 扩展方法 替换)。
详细说明
隐式转换在两种情况下应用
- 如果表达式
e是类型S,并且S不符合表达式的预期类型T。 - 在选择器
m不表示S的成员的情况下,在类型为S的e.m选择中。
在第一种情况下,搜索适用于 e 且其结果类型符合 T 的转换 c。
一个示例是将 scala.Int(例如 x)传递给需要 scala.Long 的方法。在这种情况下,将插入隐式转换 Int.int2long(x)。
在第二种情况下,搜索适用于 e 且其结果包含名为 m 的成员的转换 c。
一个示例是比较两个字符串 "foo" < "bar"。在这种情况下,String 没有成员 <,因此插入隐式转换 Predef.augmentString("foo") < "bar"。(scala.Predef 会自动导入到所有 Scala 程序中。)
进一步阅读:隐式转换(在 Scala 书籍中)。