Я расширяю абстрактный класс из библиотеки, и я хочу переопределить определение функции и использовать определение суперкласса в качестве резервной копии.Лучший способ переопределить определение функции
Если метод родительского класса был определен как 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)))
}
Да ... Я должен иметь уточняется: мой код более сложный, чем этот (очевидно), и я хотел бы иметь возможность составлять несколько частичных функций с помощью orElse. Я мог бы просто сделать по умолчанию 'def last: PartialFunction [Int, String] = {case x => super.test (x)}' и использовать это как final orElse, но это не похоже на то, что я сделал. У меня просто было ощущение, что есть эквивалент моей 'Function.unlift (x => Some (super.test (x))) глупости, которую я еще не изучил. – brandon
Обновлен мой ответ, чтобы отразить вашу цель. – Nate
Видите ли, я знал, что должен быть более простой способ! Не могу поверить, что я об этом не думал. Благодарю. – brandon