2014-09-30 3 views
1

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

class onlyLikesSingleDigits(val anyNumber: Seq[Int]) { 
    val onlySingleDigits = anyNumber.filter(_ < 10) 
} 

Идея, что вы можете построить его, и все числа, большие или равные 10, которые вы передаете в конструктор будет просто выбросить.

Моя реализация выглядит довольно уродливой. Не могу ли я сделать это без использования anyNumber? Я хочу инициализировать мой класс, используя параметры конструктора, как входные данные в filter, а не как фактические члены класса.

Как это сделать только с одним val?

+0

, если вы хотите только отфильтрованные элементы, почему бы не использовать отфильтрованную последовательность в качестве аргумента конструктора напрямую? пример немного искусственный. – Ashalynd

+0

@Ashalynd Как бы я это сделал? –

ответ

1

Вы должны лучше отделить представление данных от логики конструктора, используя шаблон Factory.

Представление данных

scala> case class OnlyLikesSingleDigits(digits: Seq[Int]) 

завод

object DigitsMaker { 
    def apply(anyNums: Seq[Int]) = OnlyLikesSingleDigits(anyNums.filter(_ < 10)) 
} 

Использование

scala> val r = DigitsMaker(Seq(4, 12, 5, 76)) 
r: OnlyLikesSingleDigits = OnlyLikesSingleDigits(List(4, 5)) 
Смежные вопросы