加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中非案例类的模式匹配

发布时间:2020-12-16 19:20:22 所属栏目:安全 来源:网络整理
导读:让我们假设我有一个简单的第三方(即我不能修改它)类定义如下: class Price(var value: Int) 是否可以将此类的实例与某些模式匹配? 例如,我想实现功能: def printPrice(price: Price) = { // implementation here} …对于每个具有值= 9000并且在所有其他情
让我们假设我有一个简单的第三方(即我不能修改它)类定义如下:

class Price(var value: Int)

是否可以将此类的实例与某些模式匹配?

例如,我想实现功能:

def printPrice(price: Price) = {
    // implementation here
}

…对于每个具有值<= 9000并且在所有其他情况下价格超过9000的价格,打印价格为{某个值}. 例如,调用:

printPrice(new Price(10))
printPrice(new Price(9001))

应该打印:

price is 10
price is over 9000

如何使用模式匹配实现printPrice?

解决方法

您可以创建自定义提取器:

package external {
    class Price(var value: Int)
}

object Price {
    def unapply(price: Price): Option[Int] = Some(price.value)
}

def printPrice(price: Price) = price match {
    case Price(v) if v <= 9000 => println(s"price is $v")
    case _ => println("price is over 9000")
}

printPrice(new Price(10))
printPrice(new Price(9001))

对于案例类编译器自动生成它.我认为在你的情况下,提取器是过度杀伤,但可能只是简化的样本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读