Tra*_*ity 6 int scala char variable-assignment
在Scala中,如果我有变量声明,例如
var x: Char = 'a'
Run Code Online (Sandbox Code Playgroud)
如果我然后尝试通过添加1来更新此字符,例如
x = x + 1
Run Code Online (Sandbox Code Playgroud)
我收到编译错误:输入不匹配,找到Int必需的Char.但是,我可以在没有编译错误的情况下执行此操作:
x = 'a' + 1
Run Code Online (Sandbox Code Playgroud)
我猜这与文字值和对象有关,但是,我试图弄清楚确切的行为.您可以清楚地为字符整数分配一个字符,例如97,您也可以分配97-32的结果.但是,如果我说97-32 + 5然后我得到类型不匹配错误.编译器在什么时候区分导致文字的表达式与导致对象的表达式?
分配是这里的关键。查看以下 REPL 会话:
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>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,除非您尝试重新分配变量值,否则一切都会正常。当您编写'a'+1或x + 1它被转换为Int. 因此,当您最终尝试x = x + 1重新分配时,您正在尝试Int为变量分配值Char。这解释了为什么会出现编译错误。
伴随对象中Char有implicit def char2int(x: Char): Int方法。我认为var x:Char = 'a' + 1发生的第一件事是调用此方法将“a”转换为 97。然后 97 加 1,两者都作为Ints。然后该变量x以与 中相同的方式实例化val y:Char = 98。我认为这解释了变量初始化的工作原理。
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |