Scala:两个相等类型之间的类型方差和模式匹配

标签 scala pattern-matching type-inference

前几天我正在制作一个类来处理一些算术运算(是的,我知道数字将在 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/

相关文章:

scala - 自动案例类映射

scala - Spark : How to transform a Seq of RDD into a RDD

java - 为什么 javac 不能为用作参数的函数推断泛型类型参数?

scala - 使用 sass 和 compass 配置文件玩框架 2

python - 使用 elastic4s 查询产生零结果

javascript - JavaScript 中的邮政信箱验证

python - 在 python 中搜索字符串中的模式

python - Python的模式匹配性能如何?是O(1)吗?

c# - 无法使用可选参数推断泛型类型

scala - 在什么条件下推断没有什么可取的?