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代码,您应该尽可能避免可变性和任意性