加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:49:39 所属栏目:安全 来源:网络整理
导读:在 Scala中,如果我有变量声明,例如 var x: Char = 'a' 如果我然后尝试通过添加1来更新此字符,例如 x = x + 1 我收到编译错误:输入不匹配,找到Int必需的Char.但是,我可以在没有编译错误的情况下执行此操作: x = 'a' + 1 我猜这与文字值和对象有关,但是,我试
在 Scala中,如果我有变量声明,例如

var x: Char = 'a'

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

x = x + 1

我收到编译错误:输入不匹配,找到Int必需的Char.但是,我可以在没有编译错误的情况下执行此操作:

x = 'a' + 1

我猜这与文字值和对象有关,但是,我试图弄清楚确切的行为.您可以清楚地为字符分配一个字面整数,例如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>

因此,除非您尝试重新分配变量值,否则一切正常.当你写’a’1或x 1时,它会转换为Int.
因此,当您最终尝试x = x 1重新分配时,您将尝试将Int值分配给Char变量.这解释了为什么会出现编译错误.

在Char伴侣对象中有隐式def char2int(x:Char):Int方法.我认为在var x:Char =’a’1中,首先发生的是调用此方法将’a’转换为97.然后将97添加为1,两者都作为Ints.然后变量x以与val y中相同的方式实例化:Char = 98.我想解释变量初始化是如何工作的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读