Scala 基本隐式查询
我是Scala的新手,我正试着了解隐式魔法。我想了解为什么我用Scala 基本隐式查询,scala,Scala,我是Scala的新手,我正试着了解隐式魔法。我想了解为什么我用+函数和2*函数得到2物理化 implicit def addToStr(str: String) = str.size scala> 2 * "mysize" res4: Int = 12 scala> 2 + "mysize" res3: String = 2mysize 请看一下API。Int类有一个用于添加字符串的+()方法 abstract def +(x: St
+
函数和2*
函数得到2物理化
implicit def addToStr(str: String) = str.size
scala> 2 * "mysize"
res4: Int = 12
scala> 2 + "mysize"
res3: String = 2mysize
请看一下API。Int
类有一个用于添加字符串的+()
方法
abstract def +(x: String): String
但是它没有将字符串相乘的*()
方法。编译器将始终选择已定义的函数/方法,而不是隐式函数/方法。作为最后手段,它只会寻找隐式解决方案。看看API。Int
类有一个用于添加字符串的+()
方法
abstract def +(x: String): String
但是它没有将字符串相乘的*()
方法。编译器将始终选择已定义的函数/方法,而不是隐式函数/方法。它将只寻找隐式解决方案作为最后手段。只有当表达式与函数的参数类型不匹配时,才会应用隐式转换。
例如:
import scala.language.implicitConversions
implicit def strToInt(s: String):Int = s.size
def printStr(s: Int):Unit = {
println(s"Printing Int ${s}")
}
printStr("SSSS")
在上面的例子中,隐式方法出现了,但是如果您定义另一个方法,如下所示
def printStr(s: String) = {
println(s"Printing String ${s}")
}
它将自动使用此方法,而不是隐式解析。
只有当表达式与函数的参数类型不匹配时,才会应用隐式转换。
例如:
import scala.language.implicitConversions
implicit def strToInt(s: String):Int = s.size
def printStr(s: Int):Unit = {
println(s"Printing Int ${s}")
}
printStr("SSSS")
在上面的例子中,隐式方法出现了,但是如果您定义另一个方法,如下所示
def printStr(s: String) = {
println(s"Printing String ${s}")
}
它将自动使用此方法,而不是隐式解析。