类型不匹配 - 什么是返回单位类型?

时间:2014-04-06 01:51:57

标签: scala

var v1  = 1
v1 = if(v1 != 0) 0;
println(v1)

我收到这样的错误。

[error] /Users/hoge/project/hello.scala:62: type mismatch;
[error]  found   : Unit
[error]  required: Int
[error]         v1 = if(v1 != 0) 0;
[error]              ^

那么,返回Unit类型的是什么?是“if”表达吗?我希望程序打印“0”。

2 个答案:

答案 0 :(得分:2)

你得到这种类型错误,因为Scala强大的类型系统已经抓住了你已经忘记的极端情况。让我们仔细检查每一行。

scala> var v1 = 1
v1: Int = 1

此处我们声明了名为var的{​​{1}},类型为v1

Int

哦,我们得到一个类型错误。我们正在尝试将scala> v1 = if (v1 != 0) 0; error: type mismatch; found : Unit required : Int v1 = if (v1 != 0) 0 的结果分配给if (v1 != 0) 0,因此v1表达式的类型最好为if(请记住,Int)。但是如果v1: Int会发生什么,即。取而代之的是隐式v1 == 0分支?

Scala将else分支的结果默认为else,因此在这种情况下,它将返回Unit。显然,我们无法将Unit分配给类型Unit的值,因此编译器会正确地抱怨。

要修复此错误,请使用默认Int值填写缺少的else分支,或者在分支内移动Int的分配,如v1

答案 1 :(得分:0)

这是因为当你使用时 v1 = if(v1 != 0) 0;如果条件不满足,它仍在尝试将v1分配给表达式。尝试将代码更改为

if(v1 != 0) v1 = 0;

scala中的

Unit有点像java中的void