我有一个案例类:
案例类人物(姓名,birthDate,许多其他字段){def something = //从字段中计算}
我最终真正想要的是为名字,birthDate和一个只读镜头的镜头,如果可能的话,将它们组合在一起,设置一个镜头来设置名字/ birthDate和读取名字/ birthDate / something
从我有限的知识看起来似乎不可能(在无形状中我为某些功能创建镜头时会出现错误)
也许它可能在其他镜头库中,或者可能有我需要做的重构
答案 0 :(得分:0)
考虑到光学通常解决了双向访问的问题(如果可能的话,获取/设置某些东西),就没有只读镜头这样的东西。
所以,无论你使用无形或Monocle还是别的东西,都不能这样做。
但是,没有什么可以阻止你做的事情:
// updates person
(lens1 composeLens lens2 composeLens personLens).modify(...)
// gets Person and reads "read only" property
(lens1 composeLens lens2 composeLens personLens).get(object).something
关于光学一般来说,有一篇关于它们的好文章,以及如何将它们与Monocles一起使用。
EDIT。好吧,也许你可以设计一些东西来拥有“只读”光学系统 - 这就是Prism总是无法更新,但这对我认为的想法来说是可怕的憎恶。那么你就不会在Person上工作,而是在Person的某个副产品上工作,但那会很尴尬地反直觉,所以我甚至不开始思考它是如何实现的。