gpt4 book ai didi

将文字或变量分配给 Char 时的 Scala 行为

转载 作者:行者123 更新时间:2023-12-01 22:10:39 25 4
gpt4 key购买 nike

在 Scala 中,如果我有一个变量声明,例如

var x: Char = 'a'

如果我然后尝试通过添加 1 来更新此字符,例如

x = x + 1

我收到编译错误:类型不匹配,发现 Int 需要 Char。但是,我可以在没有编译错误的情况下执行此操作:

x = 'a' + 1

我猜这与文字值与对象有关,但是,我正在尝试了解确切的行为。您可以明确地将文字整数分配给 Char,例如97,也可以赋值97-32的结果。但是,如果我说 97-32+5,则会出现类型不匹配错误。编译器在什么时候区分产生文字的表达式和产生对象的表达式?

最佳答案

赋值是这里的关键。查看以下 REPL session :

alex@POSITRON ~ $ scala
Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val x:Char = 'a'
x: Char = a

scala> x + 1
res0: Int = 98

scala> var y:Char = 'a'
y: Char = a

scala> y + 1
res1: Int = 98

scala> y = y + 1
<console>:8: error: type mismatch;
found : Int
required: Char
y = y + 1
^

scala>

正如您所看到的,除非您尝试重新分配变量值,否则一切都会正常。当你写'a'+1时或x + 1它被转换为Int 。所以当你最终尝试 x = x + 1重新分配然后您尝试分配 IntChar多变的。这解释了为什么会出现编译错误。

Char伴随对象有implicit def char2int(x: Char): Int方法。我认为在var x:Char = 'a' + 1首先发生的是调用此方法将 'a' 转换为 97。然后 97 加 1,两者均为 Int s。然后变量 x以与 val y:Char = 98 中相同的方式实例化。我认为这解释了变量初始化的工作原理。

关于将文字或变量分配给 Char 时的 Scala 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45486994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com