На днях я играл с классом для обработки некоторых арифметических операций (да, я знаю, что в 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
?