我认为Scala var类型很酷,有助于避免大量的技术代码,并且可以专注于功能.但是,我现在面对一些非常奇怪的事情.当我编译我的程序时,我收到一条错误消息sbt:
type mismatch;
found: java.sql.Connection
required: String
this.conn = DriverManager.getConnection(
^
Run Code Online (Sandbox Code Playgroud)
请注意,编译器指向conn类的属性,并且此属性在类中定义,如下所示:
class Db{
private var conn = ""
....
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么编译器关心类型匹配,如果是Scala,如果我使用var数据类型?
var不是数据类型.它是用于声明和定义可变变量的关键字.类型不是动态的 - 它仍然是在编译时推断出来的.在这种情况下conn推断为a String,它与写作完全相同
private var conn: String = ""
Run Code Online (Sandbox Code Playgroud)
Scala类型系统的重点是禁止传递不兼容的类型.它失败了,因为很明显,你不能将SQL连接分配给类型的变量String.类型推断不允许您忽略对象的类型,它只是让编译器尽可能地弄清楚它.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |