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语句覆盖自身。


标签:Scala
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号