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)) 对于案例类编译器自动生成它.我认为在你的情况下,提取器是过度杀伤,但可能只是简化的样本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |