Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 基本隐式查询_Scala - Fatal编程技术网

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

我是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: 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}")
}
它将自动使用此方法,而不是隐式解析。