代码之家  ›  专栏  ›  技术社区  ›  wheaties

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

  •  2
  • wheaties  · 技术社区  · 16 年前

    前几天,我在做一个类来处理一些算术运算(是的,我知道2.8中会出现numeric),我发现自己想知道如何简化以下内容:

    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类”,这样我就不必去做double了 _1:Int, _2:int

    2 回复  |  直到 16 年前
        1
  •  1
  •   Jackson Davis    16 年前

    也许我误解了您的意思,但是如果您只是希望这两个参数必须是相同的类型,您可以执行以下操作:

    def Foo[A,B >: A <: A](_1: A, _2:B) = ...
    

    这说明 B 上类型和下类型都以 A ,因此必须 A . 因此,只有在 _1 _2

        2
  •  2
  •   Daniel C. Sobral    16 年前

    我会在这里使用重载。