Scala 之旅

隐式转换

语言

隐式转换是一项强大的 Scala 功能,它支持两种常见用例

  • 允许用户提供一种类型的参数,就像它是另一种类型一样,以避免样板。
  • 在 Scala 2 中,为封闭类提供其他成员(在 Scala 3 中被 扩展方法 替换)。

详细说明

在 Scala 2 中,从类型 S 到类型 T 的隐式转换由 隐式类 T 定义,该类有一个类型为 S 的单个参数,一个 隐式值,其函数类型为 S => T,或通过可转换为该类型值的隐式方法。

在 Scala 3 中,类型 S 到类型 T 的隐式转换由 给定实例 定义,该实例具有类型 scala.Conversion[S, T]。为了与 Scala 2 兼容,它们也可以由隐式方法定义(在 Scala 2 选项卡中阅读更多内容)。

隐式转换在两种情况下应用

  1. 如果表达式 e 是类型 S,并且 S 不符合表达式的预期类型 T
  2. 在选择器 m 不表示 S 的成员的情况下,在类型为 Se.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 书籍中)

此页面的贡献者