|
120
|
| missingfaktor Kevin Wright · 技术社区 · 16 年前 |
|
|
1
94
拉链
Huet's Zipper
为不可变数据结构提供方便的遍历和“变异”。Scalaz提供拉链
但是这对你的Scala case类有什么帮助呢?嗯,卢卡斯·瑞兹最近 prototyped
因此,社区需要说服Scala团队继续这项工作并将其集成到编译器中。
published
Pacman的一个版本,用户可以通过DSL进行编程。不过,我看不出他使用了修改过的编译器
树重写在其他情况下,您可能希望根据某种策略(自上而下、自下而上)并基于与结构中某个点的值匹配的规则,在整个数据结构中应用某种转换。经典的例子是转换一种语言的AST,可能是为了评估、简化或收集信息。 Kiama 支架 Rewriting ,请参见中的示例 RewriterTests ,然后看这个 video
注意Kiama steps outside 实现这一点的类型系统。 |
|
|
2
186
有趣的是,没有人添加镜头,因为他们是为这种东西。所以, here 是CS的背景文件, here 是一个关于Scala使用镜头的博客, here 是Scalaz和 here 是一些使用它的代码,这看起来很像你的问题。而且,为了减少锅炉板, here's here's 另一个涉及镜头的S.O.问题,以及 paper 作者:Tony Morris。
所以,基于这个答案末尾提供的一个实现,下面是如何使用镜头。首先,声明镜头以更改地址中的邮政编码,以及个人中的地址:
现在,将它们组合成一个镜头,可以改变一个人的zipcode:
|
|
|
3
11
使用镜头的有用工具: 使用Rillit:
使用宏空间:
|
|
|
4
9
我一直在寻找哪一个Scala库有最好的语法和功能,这里没有提到 monocle 对我来说真的很好。示例如下:
这些都是非常好的,有很多方法来组合镜头。例如,Scalaz需要大量的样板文件,而且编译速度快,运行良好。 要在项目中使用它们,只需将其添加到依赖项中:
|
|
|
5
7
不成形的技巧是:
请注意,虽然这里的一些其他答案可以让您组合镜头深入到给定的结构中,但这些无形状镜头(和其他库/宏)可以让您组合两个不相关的镜头,这样您就可以将任意数量的参数设置到结构中的任意位置。对于复杂的数据结构,额外的组合非常有用。 |
|
|
6
7
我所做的就是简单地写一些
我的主要目标(简化客户端的更新)是:
创建完整的修改助手集显然很烦人。但是对于内部内容,在第一次尝试修改某个嵌套字段时创建它们通常是可以的。 |
|
|
7
4
也许 QuickLens 更符合你的问题。QuickLens使用宏将IDE友好的表达式转换为接近原始copy语句的内容。 给出两个实例类:
您可以使用以下命令更新raj的zipCode:
|
|
|
Martee · 用抽象类型扩展trait的case类 8 年前 |
|
Georg Heiler · 将Typesafe配置解析为case类 8 年前 |
|
|
Avba · 用于从字符串创建case对象的scala“工厂”设计模式 8 年前 |
|
|
altayseyhan · Scala case类“显式公开状态” 9 年前 |
|
|
vicaba · 不成形。引用1个构造函数参数的所有case类 9 年前 |