隐式转换是一项强大的 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 书籍中)。