2014-09-30 159 views
1

我想创建一个只保存一位数字的类。使用构造函数参数初始化类成员

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

的想法是,你可以建造它,你传入构造大于或等于10的任何数字只会被丢弃。

我的实现看起来相当难看。我不能不使用anyNumber来做到这一点吗?我想使用构造函数参数初始化我的类作为filter的输入,而不是该类的实际成员。

我怎么能做到这一点,只有一个val

+0

,为什么不使用过滤序列直接构造函数的参数?这个例子有点人造。 – Ashalynd 2014-09-30 23:27:28

+0

@Ashalynd我该怎么做? – 2014-10-01 01:16:15

回答

1

你应该更好地使用工厂模式将数据表示从构造函数逻辑中分离出来。

数据表示

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)) 
相关问题