scala之如何公开模式匹配的测试
zdz8207
阅读:16
2024-11-24 20:56:43
评论:0
我是 scala 的新手,但基本上已经找到了自己的出路...
在这里,我要求推荐/最佳实践/惯用的实现方式:
- 在内部,MyClass 使用一个state 类型,它由一个密封的案例类层次结构实现
- 但在 API 上,只应公开一些 bool 谓词,这是通过与(内部)状态匹配来实现的。
目前,我的实现是沿着......
def isSane: Boolean = state match {
case Ok(_,'valid) => true
case _ => false
}
但是这个解决方案对我来说感觉很尴尬,好像用3行代码表达了一些只有一行代码的信息内容。实际上,我想写的是:
def isSane: boolean = state matches Ok(_, 'valid)
很可能/很可能可以在 scala 中自己实现一个合适的运算符,但在我研究之前,我想知道解决这个问题的通常方法是什么。也许周围还有一些现有的库实现?
请您参考如下方法:
我会做这样的事情:
abstract class State {
def matches(pf: PartialFunction[State, Unit]) = pf isDefinedAt this
}
// then
def isSane = state matches { case Ok(_,'valid) => }
因为 matches
被定义为接收部分函数,所以您可以在它后面跟一个函数文字,其中只包含应导致 true 的 case 语句。您不需要返回任何东西,因为部分函数被定义为返回 Unit
。最后,matches
方法使用偏函数的isDefinedAt
方法来验证是否有case语句覆盖自身。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。