前几天我正在制作一个类来处理一些算术运算(是的,我知道数字将在 2.8 中出现),并发现自己想知道如何简化以下内容:
def Foo[A]( _1:A, _2:A ) = (_1, _2) match{
case _1:Bar, _2:Bar => _1 + _2
case _1:Baff, _2:Baff => _1 push _2
case _, _ => None
}
这样我就可以做到
def Foo[A]( _1:A, _2:A ) = _1 match{
case _1:Bar => _1 + _2
case _1:Baff => _1 push _2
case _ => None
}
当然,我知道在声明函数时,_2
的类型可以继承自 _1
的类型,“A”可以是共同的特征,等等。我知道这意味着编译器需要抗议以保护代码。有没有办法说“我希望 _1 和 _2 是同一个 extact 类”,这样我就不必进行双重 _1:Int, _2:int
声明?
最佳答案
我会在这里使用重载。
关于Scala:两个相等类型之间的类型方差和模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2692417/