-3

scala 中的隐式类型如何参考此https://youtu.be/hC4gGCD3vlY?t=263工作。

我也不明白为什么他提到 convertAtoB 对象是静态的。

4

1 回答 1

1

implicitConversion让我们从带有标志的 scala REPL 开始。

$ scala -language:implicitConversions
Welcome to Scala 2.12.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_151).
Type in expressions for evaluation. Or try :help.

假设您希望将数字字符串中的所有整数都包装为"Number(input)".

现在,您可以定义一个隐式方法,而不是每次都调用一个函数将 int 转换为所需的类型,该方法一旦看到您在隐式转换器中定义的输入和输出,就会为您执行此操作。

例子,

scala> object NumberToString { implicit def wrapWithNumber(n: Int): String = s"Number(${n})" }
defined object NumberToString

请注意,这NumberToString是一个单例类或 Java 世界中的什么static类。

scala> import NumberToString._
import NumberToString._

现在,如果您只定义一个 type 变量Int,则不会发生转换,因为它已经是 typeInt并且编译器很高兴。

scala> val asItis = 1000
asItis: Int = 1000

但是,如果你给它一个不同的类型,那么编译器会寻找隐式方法,并选择一个匹配的方法。

scala> val richInt: String = 1000
richInt: String = Number(1000)
于 2017-12-17T00:16:15.530 回答