【问题标题】:Why can't a string literal be assigned to variable of type String为什么不能将字符串文字分配给 String 类型的变量
【发布时间】:2021-09-09 18:08:35
【问题描述】:

我正在试用 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 scala type-conversion typeerror scala-3


    【解决方案1】:

    我想通了:我在我的包中定义了一个名为 String 的案例类,它掩盖了 java.lang.String。但是错误消息没有包含 FQCN,导致混淆。

    【讨论】:

    • 错误消息确实应该说明所讨论的两种String 类型是不同的。也许您可以提出功能请求,因为这可能也会对其他人有所帮助。
    猜你喜欢
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2018-04-05
    • 2011-07-02
    相关资源
    最近更新 更多