Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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,我认为Scalavar类型很酷,可以帮助避免大量的技术代码,并且可以专注于功能。然而,我现在面临着一些非常奇怪的事情。编译程序时,我从sbt收到一条错误消息: type mismatch; found: java.sql.Connection required: String this.conn = DriverManager.getConnection( ^ 请注意,编译器指向类的conn属性,该属性在类中定义如

我认为Scala
var
类型很酷,可以帮助避免大量的技术代码,并且可以专注于功能。然而,我现在面临着一些非常奇怪的事情。编译程序时,我从
sbt
收到一条错误消息:

type mismatch;
found: java.sql.Connection
required: String

this.conn = DriverManager.getConnection(
                                       ^
请注意,编译器指向类的
conn
属性,该属性在类中定义如下:

class Db{
   private var conn = ""

   ....
}

那么,如果是
Scala
并且我使用的是
var
数据类型,为什么编译器会关心类型匹配?

var
不是数据类型。它是用于声明和定义可变变量的关键字。该类型不是动态的——它仍然是在编译时推断出来的。在这种情况下,
conn
被推断为一个
字符串
,它与写入完全相同

private var conn: String = ""

Scala类型系统的全部要点是不允许传递不兼容的类型。它之所以失败,显然是因为您无法将SQL连接分配给
String
类型的变量。类型推断不允许您忽略对象的类型,它只是让编译器尽可能地计算出来。

var
不是一种数据类型,它是用于在Scala中定义变量的一个关键字。另一个是
val
。使用
var
还是
val
只会影响您定义的变量是可以重新分配给(
var
)还是只读(
val
)。无论如何,它都不会影响中变量的类型

无论您使用的是
var
还是
val
,变量的类型都是显式指定的(通过在变量名称后写入
:type
),或者是从指定给它的值隐式推断出来的


在您的示例中,您没有显式提供类型,因此推断的类型是
String
,因为这是
conn

的类型。我提供了来自
sbt
的完整错误消息。很抱歉,我希望消息位于
^
下。哦,我明白了。我只是想,使用
Scala
中的
var
我可以得到一些我在
Java
中无法实现的东西——将我想要的任何类型分配给变量,并在运行时在类型之间切换。