scala中的隐式类型如何参考此https://youtu.be/hC4gGCD3vlY?t=263 [关闭]

问题描述 投票:-4回答:1

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

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

scala generics functional-programming implicits scala-implicits
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字符串中作为"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._

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

scala> val asItis = 1000
asItis: Int = 1000

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

scala> val richInt: String = 1000
richInt: String = Number(1000)
© www.soinside.com 2019 - 2024. All rights reserved.