3
我有兩個無形的可擴展記錄,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
我如何檢查是否一個記錄是一個另一個亞型?我希望能夠在編譯時和運行時都做到這一點。我想到的一個用例是我想靜態驗證函數不會從記錄中刪除任何字段。所以我的功能可能會採取person
並將其轉換爲employee
,但如果它刪除「城市」或「ID」字段,程序不應該編譯。
我也希望能夠比較employee
和person
的共享組件。我想查看這兩個對象只是person
s並檢查它們是否相等。我怎樣才能做到這一點?
此功能將存在於無形的2.3.3 HTTPS ://github.com/milessabin/shapeless/pull/714 –