Scala案例类,无法覆盖构造函数参数

Capacytron

我有这个案例课:

 case class MyCaseClass(left:Long, right: Long = Option[Long], operator: Operator = Option[Operator]){

    def inRange(outer: Long) = outer >= left && outer <= right
  }

这是我尝试实例化的方法:

val instance = MyCaseClass(leftValue)

但是我得到一个编译错误:

未指定的值参数权限,运算符

这个错误是什么意思?我只想为一个案例类提供两个构造函数:一个带有三个参数,另一个带有一个参数。

这有效(如Ende Neu所建议的):

case class MyCaseClass(left:Long, right: Option[Long] = None, operator: Option[Operator] = None)

问题是,我要包rightoperatorOption以下内容使您可以避免Optionrightoperator参数进行换行(有关更多详细信息,请参见答案):

object MyCaseClass {
  def apply(left: Long, right: Long, operator: Operator) = new MyCaseClass(left, Option(right), Option(operator))
}
结束新

您没有传递默认值,而是传递了类型,如果要传递默认参数,则必须指定一些值:

scala>  case class Operator(operation: String)
defined class Operator

scala>   case class MyCaseClass(left:Long, right: Long = 0L, operator: Operator = Operator("+")){
      |     def inRange(outer: Long) = outer >= left && outer <= right
      |   }
defined class MyCaseClass

scala>   val instance = MyCaseClass(10L)
instance: MyCaseClass = MyCaseClass(10,0,Operator(+))

如果要包装它们,Option则必须声明它们:

 case class MyCaseClass(left:Long, right: Option[Long] = None, operator: Option[Operator] = None)

在我用作None值的地方,您也可以使用Some并将一些默认值传递给它们。

如果您不希望用户使用选项创建完整的对象,请创建一个伴随对象并定义一个新的apply方法:

case class Operator(operation: String)

object MyCaseClass {
  def apply(left: Long, right: Long, operator: Operator) = new MyCaseClass(left, Option(right), Option(operator))
}

case class MyCaseClass(left:Long, right: Option[Long] = None, operator: Option[Operator] = None)

您现在可以用不同的方式构造对象:

MycaseClass(10L)
MycaseClass(10L, Option(10L), Option(Operator("+"))
MycaseClass(10L, 20L, Operator("+"))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala案例类:如何验证构造函数的参数

来自分类Dev

Scala案例类和构造函数

来自分类Dev

智能构造函数的Scala案例类实现?

来自分类Dev

智能构造函数的Scala案例类实现?

来自分类Dev

Scala:定义案例类构造函数时,“覆盖保护的val”导致错误

来自分类Dev

如何限制案例类在Scala中具有特定的参数类型构造函数?

来自分类Dev

在Scala中调用反射案例类构造函数

来自分类Dev

在设置值之前修改案例类构造函数参数

来自分类Dev

重塑案例类构造函数?

来自分类Dev

Scala覆盖类参数

来自分类Dev

预处理案例类构造函数的参数,而无需重复参数列表

来自分类Dev

从案例类外部查询时,为什么getClass在案例类构造函数参数上返回不同的值?

来自分类Dev

为什么在具有相同构造函数参数类型的案例类中,scala可序列化性会有所不同?

来自分类Dev

Scala中具有构造函数参数的抽象类

来自分类Dev

具有可变数量参数的Scala类构造函数

来自分类Dev

Scala类层次结构的设计。构造函数参数与成员

来自分类Dev

scala-meta:在类构造函数中解析可变参数

来自分类Dev

Spark 向 Scala 类的构造函数添加隐藏参数

来自分类Dev

Scala案例类的私有构造函数不是私有的

来自分类Dev

默认情况下,案例类构造函数参数是否为公共val字段?

来自分类Dev

Scala类型参数和案例类

来自分类Dev

Scala:清理构造函数参数

来自分类Dev

Scala:如何在案例类构造函数中使用类型作为第一类值?

来自分类Dev

案例类中的静态函数(Scala)

来自分类Dev

注入类的构造函数参数

来自分类Dev

IServiceCollection覆盖单个构造函数参数

来自分类常见问题

Scala特性如何覆盖派生的toString案例类

来自分类Dev

Scala特性如何覆盖派生的toString案例类

来自分类Dev

多个构造函数 - 无法构造参数

Related 相关文章

  1. 1

    Scala案例类:如何验证构造函数的参数

  2. 2

    Scala案例类和构造函数

  3. 3

    智能构造函数的Scala案例类实现?

  4. 4

    智能构造函数的Scala案例类实现?

  5. 5

    Scala:定义案例类构造函数时,“覆盖保护的val”导致错误

  6. 6

    如何限制案例类在Scala中具有特定的参数类型构造函数?

  7. 7

    在Scala中调用反射案例类构造函数

  8. 8

    在设置值之前修改案例类构造函数参数

  9. 9

    重塑案例类构造函数?

  10. 10

    Scala覆盖类参数

  11. 11

    预处理案例类构造函数的参数,而无需重复参数列表

  12. 12

    从案例类外部查询时,为什么getClass在案例类构造函数参数上返回不同的值?

  13. 13

    为什么在具有相同构造函数参数类型的案例类中,scala可序列化性会有所不同?

  14. 14

    Scala中具有构造函数参数的抽象类

  15. 15

    具有可变数量参数的Scala类构造函数

  16. 16

    Scala类层次结构的设计。构造函数参数与成员

  17. 17

    scala-meta:在类构造函数中解析可变参数

  18. 18

    Spark 向 Scala 类的构造函数添加隐藏参数

  19. 19

    Scala案例类的私有构造函数不是私有的

  20. 20

    默认情况下,案例类构造函数参数是否为公共val字段?

  21. 21

    Scala类型参数和案例类

  22. 22

    Scala:清理构造函数参数

  23. 23

    Scala:如何在案例类构造函数中使用类型作为第一类值?

  24. 24

    案例类中的静态函数(Scala)

  25. 25

    注入类的构造函数参数

  26. 26

    IServiceCollection覆盖单个构造函数参数

  27. 27

    Scala特性如何覆盖派生的toString案例类

  28. 28

    Scala特性如何覆盖派生的toString案例类

  29. 29

    多个构造函数 - 无法构造参数

热门标签

归档