【问题标题】:Initialization of class members using constructor parameters使用构造函数参数初始化类成员
【发布时间】:2014-09-30 22:39:25
【问题描述】:

我想创建一个只包含一位数字的类。

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

这个想法是你可以构造它,你传递给构造函数的任何大于或等于 10 的数字都将被丢弃。

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

我怎样才能只用一个 val 做到这一点?

【问题讨论】:

  • 如果你只想要过滤元素,为什么不直接使用过滤序列作为构造函数参数呢?这个例子有点人为。
  • @Ashalynd 我该怎么做?

标签: scala


【解决方案1】:

只需从anyNumber 中删除val,它就不会成为该类的成员。也许你会发现这很有帮助:scala class constructor parameters

【讨论】:

    【解决方案2】:

    您应该使用工厂模式更好地将数据表示与构造函数逻辑分开。

    数据表示

    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 2011-08-09
      • 2020-11-17
      • 1970-01-01
      • 2017-06-23
      相关资源
      最近更新 更多