使用构造函数参数初始化类成员
问题描述:
我想创建一个只保存一位数字的类。使用构造函数参数初始化类成员
class onlyLikesSingleDigits(val anyNumber: Seq[Int]) {
val onlySingleDigits = anyNumber.filter(_ < 10)
}
的想法是,你可以建造它,你传入构造大于或等于10的任何数字只会被丢弃。
我的实现看起来相当难看。我不能不使用anyNumber
来做到这一点吗?我想使用构造函数参数初始化我的类作为filter
的输入,而不是该类的实际成员。
我怎么能做到这一点,只有一个val
?
答
你应该更好地使用工厂模式将数据表示从构造函数逻辑中分离出来。
数据表示
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))
,为什么不使用过滤序列直接构造函数的参数?这个例子有点人造。 – Ashalynd 2014-09-30 23:27:28
@Ashalynd我该怎么做? – 2014-10-01 01:16:15