为什么不能将字符串文字分配给 String 类型的变量
Why can't a string literal be assigned to variable of type String
我正在试用 Scala 3,并尝试将字符串文字分配给控制台中的变量。如果我不给它明确的类型,一切都很好:
scala> val s = "hello"
val s: String = hello
并且变量甚至具有推断出的类型 String
。但是,当我将类型设为显式时,出现类型错误:
scala> val t: String = "hello"
1 |val t: String = "hello"
| ^^^^^^^
| Found: ("hello" : String)
| Required: String
当我使用显式类型 var
时也会发生同样的情况:
scala> var v: String = _
var v: String = null
scala> v = "hello"
1 |v = "hello"
| ^^^^^^^
| Found: ("hello" : String)
| Required: String
但是,如果我用字符串文字初始化 var
,我可以为它分配其他字符串文字:
scala> var u = "hello"
var u: String = hello
scala> u = "world"
u: String = world
某些字符串变量被允许保存字符串文字而另一些则不允许,背后的类型系统秘密是什么?
我想通了:我在我的包中定义了一个名为 String
的案例 class,它掩盖了 java.lang.String
。但是错误消息没有包括 FQCN,导致混淆。
我正在试用 Scala 3,并尝试将字符串文字分配给控制台中的变量。如果我不给它明确的类型,一切都很好:
scala> val s = "hello"
val s: String = hello
并且变量甚至具有推断出的类型 String
。但是,当我将类型设为显式时,出现类型错误:
scala> val t: String = "hello"
1 |val t: String = "hello"
| ^^^^^^^
| Found: ("hello" : String)
| Required: String
当我使用显式类型 var
时也会发生同样的情况:
scala> var v: String = _
var v: String = null
scala> v = "hello"
1 |v = "hello"
| ^^^^^^^
| Found: ("hello" : String)
| Required: String
但是,如果我用字符串文字初始化 var
,我可以为它分配其他字符串文字:
scala> var u = "hello"
var u: String = hello
scala> u = "world"
u: String = world
某些字符串变量被允许保存字符串文字而另一些则不允许,背后的类型系统秘密是什么?
我想通了:我在我的包中定义了一个名为 String
的案例 class,它掩盖了 java.lang.String
。但是错误消息没有包括 FQCN,导致混淆。