使用构造函数参数初始化类成员

时间:2014-09-30 22:39:25

标签: scala

我想创建一个只保留一位数字的类。

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

这个想法是你可以构造它,并且任何大于或等于10的数字都会被丢弃。

我的实施看起来很丑陋。我不能在不使用anyNumber的情况下执行此操作吗?我想使用构造函数参数初始化我的类作为filter的输入,而不是作为类的实际成员。

如何只使用一个val

来完成此操作

2 个答案:

答案 0 :(得分:2)

只需从val中移除anyNumber,它就不会是该类的成员。也许你会发现这有用:scala class constructor parameters

答案 1 :(得分: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))