我曾经使用类似下面的习语来使用 ScalaCheck 生成案例类:
GenSomething.map2(GenSomethingElse)(MyClass(_, _))
我们最近将 ScalaCheck 升级到 1.11,删除了这些mapN
方法。我真的希望能够避免必须为每个字段的生成器分配中间名称,并且这些mapN
方法提供了最简单的方法来做到这一点。现在,最好的语法是:
for {
something <- GenSomething
somethingElse <- GenSomethingElse
} yield MyClass(
something = something,
somethingElse = somethingElse)
这还不错(因为结构将包含少量的构造函数参数),但我真的想明确一点,这里没有什么特别的,我只是为每个参数指定生成器,而没有读者代码必须通读以确认。
简而言之,我想要类似于应用语法的东西。不幸的是,不能选择使用 scalaz、shapeless 或宏。我意识到最后一句话几乎让我的问题是“我怎么能做 X 没有访问让我做 X 的事情”,但我希望有人会有一个好主意。