问题标签 [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.

0 投票
0 回答
54 浏览

typescript - 是否可以使用镜头(或其他光学器件)进行约束模型更新?

我正在使用需要验证用户输入的 Web UI。实现双拇指滑块时,使用带有“约束”更新的镜头时会出现问题。使用时lens.set,需要验证新值,如果在给定的约束下它是无效的,则应该更新最接近的有效值。验证是多个简单标尺的组合。

我找不到合适的镜头来模拟这种“装饰”setmodify


我正在使用以下模型,(使用monocle-ts

在长度受到限制之前,每件事都可以正常工作。我想得到类似“步长”的东西,因此状态的长度需要是给定步长的整数倍。第一次尝试类似于以下内容:

尽管它似乎可以满足保持长度步长约束,但lengthStepLens上面似乎违反了镜头定律:

例如step = 1,如果

法律只适用于“有效”的新价值观。


另一种方法是使用单独的验证和校正逻辑,但我缺少使用镜头的两个优点:

  1. 从用户更新逻辑抽象实际状态表示(即组件接受通用状态TLens<T, number>工作)

  2. 组合多个约束(标尺)看起来就像组合镜头的提升版本。实际上还有其他约束,例如min,和的max约束。组成约束看起来像是一些“单子”的镜头链接,也许像startend


问题:

  • 是否存在满足此问题的正确光学原理?

  • 使用违反法律的镜头会发生什么?

0 投票
0 回答
44 浏览

scala - 使用 Monocle 镜头从孩子访问父案例类

我想在 Scala 中使用光学而不是沿着嵌套结构向下遍历,而是像从子级到父级一样遍历其他方式。

我尝试过创建WithParent[T]子类扩展的特征。例如 -

我有2个问题-

  1. 这种方法会奏效吗?如果是这样,我可以在特征本身中定义父级吗?
  2. 有没有更好的方法来解决这个问题?

编辑:

编辑 2:帐户具有唯一的客户标识符。

真实世界场景

我的问题:反过来可能吗?从帐户对象访问客户?

我的方法的逻辑: trait MyParent[T]将包含一个parentT 类型的对象/变量,可以从扩展它的案例类访问。

谢谢!