Scala 为什么';var imp:=';不编译?

Scala 为什么';var imp:=';不编译?,scala,Scala,为什么初始化需要对象类型: 为什么要编译: var imp : String = _ 但这并不是: var imp = _ 出现错误:未绑定占位符参数 这是因为对象类型在初始化时未知吗?是的——这是因为对象类型在声明/初始化时未知。是的——这是因为对象类型在声明/初始化时未知。当您编写var imp:String=时,Scala知道imp是一个字符串,即使它没有值(它将其初始化为null) 当您编写var imp=.时,Scala不知道类型是什么。只有当您显式地指定它或给出一个可以推断它的初

为什么初始化需要对象类型:

为什么要编译:

var imp : String = _
但这并不是:

var imp = _
出现错误:
未绑定占位符参数


这是因为对象类型在初始化时未知吗?

是的——这是因为对象类型在声明/初始化时未知。

是的——这是因为对象类型在声明/初始化时未知。

当您编写
var imp:String=
时,Scala知道
imp
是一个字符串,即使它没有值(它将其初始化为
null


当您编写
var imp=.
时,Scala不知道类型是什么。只有当您显式地指定它或给出一个可以推断它的初始值时,它才能知道所需的类型

当您编写
var imp:String=.
时,Scala知道
imp
是一个字符串,即使它没有值(它将其初始化为
null


当您编写
var imp=.
时,Scala不知道类型是什么。只有当您显式地指定它或给出一个可以推断它的初始值时,它才能知道所需的类型

它能不能初始化它以键入值为null的Any,然后在它用于键入String时使用类型推断将其转换?@user470184假设这是可以做到的,但它是潜在错误和几率的巨大来源:例如,如果有人只留下var x=u,而不提供更多的赋值,那么。。。等等在这种相对罕见的情况下,编写
var x:Any=\u
var x:String=\u
并不难。@om nom nom“如果有人离开了var x=\uz,不再提供援助怎么办”这有什么关系?这难道不是说‘var x:String=389;’并没有提供更多赋值的问题吗?它是否可以初始化它以键入值为null的Any,然后在用于键入String时使用类型推断将其转换为Any?@user470184假设可以这样做,但这是潜在错误和可能性的巨大来源:例如,如果有人只是离开var x=u而不提供更多的赋值,如果。。。等等在这种相对罕见的情况下,编写
var x:Any=\u
var x:String=\u
并不难。@om nom nom“如果有人离开了var x=\uz,不再提供援助怎么办”这有什么关系?这难道不是说“var x:String=\uu”并没有提供更多赋值的问题吗?var imp:String=\uu、var imp=\uu或var imp:Any=\uu通常被认为是正确的scala代码,您应该尽可能避免可变性和任意性var imp:String=\uvar imp=\uor var imp:Any=\通常被认为是正确的scala代码,您应该尽可能避免可变性和任意性