Я довольно новичок в Scala, и часть моего проекта закончилась следующим дизайном.Определение типа и переопределение
trait StringService {
def length(s: String): Int
def vowels(s: String): Int
}
Эти методы используются в качестве параметров
def processStrings(operation: String => Int) = {...}
звонки как processStrings(ss.length)
работают отлично. Теперь я хотел бы абстрактные типа этих методов
type StringFuction = String => Int
Проблема заключается в том, что реализация как
override def length(s: String): Int = { ... }
больше не действует. Конечно, я могу пойти с
override def length: StringFunction = { (s: String) => ... }
но это кажется немного выключенным. Каков правильный путь? Пожалуйста, не стесняйтесь предлагать другой дизайн, если это не настоящий подход Scala.
Ваша первоначальная реализация по-прежнему действует. Почему вы думаете иначе? Вы получаете сообщение об ошибке? –
Не уверен, что вы имеете в виду. Реализация как 'override def length (s: String) = s.length' приводит к ошибке« длина метода ничего не отменяет ». 'override def length: StringFunction = _.length' работает, но мне просто не нравится, почему-то я не понимаю. Хотя, если это рекомендуемый подход, я буду жить с ним. –
Без полного кода было непонятно, что это за метод 'length'. Я могу дать лучший ответ с полным кодом. –