问题标签 [monocle-scala]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
typescript - 是否可以使用镜头(或其他光学器件)进行约束模型更新?
我正在使用需要验证用户输入的 Web UI。实现双拇指滑块时,使用带有“约束”更新的镜头时会出现问题。使用时lens.set
,需要验证新值,如果在给定的约束下它是无效的,则应该更新最接近的有效值。验证是多个简单标尺的组合。
我找不到合适的镜头来模拟这种“装饰”set
或modify
。
我正在使用以下模型,(使用monocle-ts)
在长度受到限制之前,每件事都可以正常工作。我想得到类似“步长”的东西,因此状态的长度需要是给定步长的整数倍。第一次尝试类似于以下内容:
尽管它似乎可以满足保持长度步长约束,但lengthStepLens
上面似乎违反了镜头定律:
例如step = 1
,如果
法律只适用于“有效”的新价值观。
另一种方法是使用单独的验证和校正逻辑,但我缺少使用镜头的两个优点:
从用户更新逻辑抽象实际状态表示(即组件接受通用状态
T
并Lens<T, number>
工作)组合多个约束(标尺)看起来就像组合镜头的提升版本。实际上还有其他约束,例如
min
,和的max
约束。组成约束看起来像是一些“单子”的镜头链接,也许像start
end
问题:
是否存在满足此问题的正确光学原理?
使用违反法律的镜头会发生什么?
scala - 使用 Monocle 镜头从孩子访问父案例类
我想在 Scala 中使用光学而不是沿着嵌套结构向下遍历,而是像从子级到父级一样遍历其他方式。
我尝试过创建WithParent[T]
子类扩展的特征。例如 -
我有2个问题-
- 这种方法会奏效吗?如果是这样,我可以在特征本身中定义父级吗?
- 有没有更好的方法来解决这个问题?
编辑:
编辑 2:帐户具有唯一的客户标识符。
真实世界场景
我的问题:反过来可能吗?从帐户对象访问客户?
我的方法的逻辑:
trait MyParent[T]
将包含一个parent
T 类型的对象/变量,可以从扩展它的案例类访问。
谢谢!