【发布时间】:2020-03-18 18:19:40
【问题描述】:
假设我有
sealed trait AlphaNumericChar
sealed trait AlphaChar
case object A extends AlphaNumericChar with AlphaChar
case object B extends AlphaNumericChar with AlphaChar
sealed trait NumericChar
case object One extends AlphaNumericChar with NumericChar
case object Two extends AlphaNumericChar with NumericChar
此结构允许我在 AlphaNumericChar 上进行模式匹配并获取所有 A,B,One,Two 并在 AlphaChar 和 NumericChar 上进行类似的模式匹配并仅获取相关对象。
它不允许我写的是:
def foo(x: AlphaNumericChar) = ???
def bar(x: AlphaChar) = foo(x)
即,仅针对某些类型代理对foo 的调用。我当然可以改写:
def baz(x: AlphaNumericChar with AlphaChar) = foo(x)
这会起作用,但这可能有点难看。
另一种方法是使 AlphaChar 和 NumericChar 扩展 AlphaNumericChar 但这会弄乱我在 AlphaNumericChar 上的模式匹配,因为我现在必须处理 _:AlphaChar 和 _:NumericChar 除了我的案例对象这是不可取的。
有没有办法让两全其美?即。
-
AlphaChar/NumericChar上的模式匹配条目的详尽列表只有两个元素。 -
AlphaNumericChar上的模式匹配条目的详尽列表只有两个元素。 - 我可以让上面的
bar函数工作,而无需使用baz语法。
【问题讨论】:
标签: scala pattern-matching hierarchical