为什么我可以为单位值赋值null,为什么它会转换为()?

soc*_*soc 9 null scala class unit-type

考虑以下代码:

var unit: Unit = null
unit: Unit = ()
Run Code Online (Sandbox Code Playgroud)

a)为什么我允许将null赋给值类?(见§12.2.3)

b)为什么null转换为()

Ken*_*oom 19

从scala规范部分6.26.1:

价值丢弃.如果e具有某种值类型且期望的类型是Unit,e则通过将其嵌入到术语中而将其转换为期望的类型{ e ; () }.

换句话说,您的代码相当于

var unit: Unit = {null; ()}
unit: Unit = ()
Run Code Online (Sandbox Code Playgroud)

null不转换-它只是忽略,取而代之的(),预定义的Unit值.