如何隐式转换为Unit?

时间:2015-01-20 17:56:07

标签: scala

是否可以针对给定对象执行隐式自定义转换为Unit

我的意思是定义如下转换:

implicit def toUnit(m: MyClass): Unit = println("Hello")

使用如下:

val x: MyClass = new MyClass() // no conversions
val y: Unit = new MyClass() // 1
new MyClass() // 2

我已经为上面的其他对象定义了一些转换:Unit是唯一无效的类。

我认为它应该可行,至少在 1 的情况下,但我看不到控制台上打印Hello。为什么?

1 个答案:

答案 0 :(得分:4)

这不起作用,因为Unit由编译器专门处理。由于价值丢弃,您可以将MyClass分配给Unit。没有任何牵连。

来自scala spec

  

如果e具有某种值类型且预期类型为Unit,则通过将e嵌入到术语{e;中来将e转换为期望类型。 ()}。

所以这里发生的是编译器将new MyClass()更改为

{ new MyClass(); () }