Лучший способ переопределить определение функции

88
7

Я расширяю абстрактный класс из библиотеки, и я хочу переопределить определение функции и использовать определение суперкласса в качестве резервной копии.

Если метод родительского класса был определен как PartialFunction, я мог бы просто использовать orElse. Так как это не так, я делаю следующее: отбрасывая родительскую функцию в частичную функцию, чтобы я мог использовать orElse. Это работает, но это один из тех случаев, когда я подозреваю, что есть лучший/более элегантный способ. Здесь?

abstract class ThingICantChange {
def test:Int=>String = {
case 1 => "one"
case 2 => "two"
case _ => "unknown"
}
}

class MyClass extends ThingICantChange {
def myChanges:PartialFunction[Int,String] = {
case 2 => "mytwo"
case 3 => "three"
}
override def test = myChanges orElse Function.unlift(x => Some(super.test(x)))
}

спросил(а) 2021-01-25T20:16:56+03:00 4 месяца, 4 недели назад
1
Решение
89

Я бы сделал это:

class MyClass extends ThingICantChange {
override def test: Int => String = {
case 2 => "mytwo"
case 3 => "three"
case x => super.test(x)
}
}

Если вы хотите построить частичную функцию из super.test то здесь чистый способ:

override def test = myChanges orElse PartialFunction(super.test)

ответил(а) 2021-01-25T20:16:56+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема