为什么单位不在Scala中扩展产品?

时间:2014-08-01 20:38:16

标签: scala types tuples case-class

在Scala中,为什么Unit扩展Product特征就像Tuple *类和案例类(包括"空" ,如case class Empty()和案例对象)?

Unit(更具体的单位价值())绝对是空产品和元组。例如,它在shapeless中以这种方式使用。

2 个答案:

答案 0 :(得分:0)

根据第12.2.3节,当前Scala Language Specification似乎需要符合Scala的实现:

  

Unit ...仅实现类hashCode中的三种方法,toStringAny

要扩展Product并实现其方法,规范的这一部分必须改变。

答案 1 :(得分:-1)

单位与空集合不相似,因此将它作为arity零的乘积是没有意义的。即使Product0不包含任何数据,它仍然会通过productElement和productIterator方法定义行为。

Unit的目标是表示除了Object中定义的最低限度以外的任何行为或数据的缺失。实际上,getClass()函数返回null以指示它没有类型,根据定义它不应该没有与之关联的元数据。

如果您要制作单位扩展产品,那么它将违反“无类型”的概念。