Scala 检查shapeless中可扩展记录之间的子类型关系
我有两个不成形的可扩展记录,Scala 检查shapeless中可扩展记录之间的子类型关系,scala,shapeless,Scala,Shapeless,我有两个不成形的可扩展记录,person和employee。employee记录在某种意义上是person的一个子类型,因为它具有person所具有的所有字段,并且这些字段都是person中相应字段的子类型: import shapeless._ ; import syntax.singleton._ ; import record._ val employeeId = ("first name" ->> "Jane") :: ("last name" ->> "Doe
person
和employee
。employee
记录在某种意义上是person
的一个子类型,因为它具有person
所具有的所有字段,并且这些字段都是person
中相应字段的子类型:
import shapeless._ ; import syntax.singleton._ ; import record._
val employeeId = ("first name" ->> "Jane") :: ("last name" ->> "Doe") :: ("title" ->> "software engineer") :: HNil
val employee =
("id" ->> employeeId) ::
("city" ->> "San Francisco") ::
("company" ->> "Generic Inc.") ::
HNil
val personId = ("first name" ->> "Jane") :: ("last name" ->> "Doe") :: HNil
val person =
("id" ->> personId) ::
("city" ->> "San Francisco") ::
HNil
如何检查一条记录是否是另一条记录的子类型?我希望能够在编译时和运行时都做到这一点。我想到的一个用例是,我想静态地验证函数是否没有从记录中删除任何字段。因此,我的函数可以将个人
转换为员工
,但如果它删除了“city”或“id”字段,则程序不应编译
我还希望能够比较employee
和person
的共享组件。我想将这两个对象都看作是person
s,并检查它们是否相等。我该怎么做?- 如何检查一条记录是否是另一条记录的子类型
- 我希望能够在编译时和运行时都做到这一点
- 我还希望能够比较employee和person的共享组件。我想将这两个对象都视为人,并检查它们是否相等。我该怎么做
- 我想静态地验证函数是否没有从记录中删除任何字段。所以我的函数可以将一个人转换成一个雇员,但是如果它删除了“city”或“id”字段,程序就不应该编译
def personToEmployee(p: Person): Employee = ???
类型检查器不允许您删除城市或id字段此功能将在2.3.3中以不成形形式出现
def personToEmployee(p: Person): Employee = ???