在Scala中,为什么Unit
扩展Product
特征就像Tuple
*类和案例类(包括"空" ,如case class Empty()
和案例对象)?
Unit
(更具体的单位价值()
)绝对是空产品和元组。例如,它在shapeless中以这种方式使用。
答案 0 :(得分:0)
根据第12.2.3节,当前Scala Language Specification似乎需要符合Scala的实现:
类
Unit
...仅实现类hashCode
中的三种方法,toString
和Any
。
要扩展Product
并实现其方法,规范的这一部分必须改变。
答案 1 :(得分:-1)
单位与空集合不相似,因此将它作为arity零的乘积是没有意义的。即使Product0不包含任何数据,它仍然会通过productElement和productIterator方法定义行为。
Unit的目标是表示除了Object中定义的最低限度以外的任何行为或数据的缺失。实际上,getClass()函数返回null以指示它没有类型,根据定义它不应该没有与之关联的元数据。
如果您要制作单位扩展产品,那么它将违反“无类型”的概念。