Scala:作为构造函数的一部分调用方法

Scala:作为构造函数的一部分调用方法,scala,constructor,default-constructor,Scala,Constructor,Default Constructor,我在Scala中有一个类,其构造函数有两个参数: class SomeClass (x:Int, y:Int) { } 我需要扩展构造函数,以便在初始化此类的对象时,调用某个方法,该方法使用Scala默认的主构造函数中定义的x值,然后输出值z: def defineInputs(): Int = { val z = x + 1 z } 我希望类中的所有方法都可以公开访问z的值,就像x和y一样 你能帮我一下吗?你可以在类中定义一个val,如下所示: scala> :pa

我在Scala中有一个类,其构造函数有两个参数:

class SomeClass (x:Int, y:Int) {
}
我需要扩展构造函数,以便在初始化此类的对象时,调用某个方法,该方法使用Scala默认的主构造函数中定义的
x
值,然后输出值
z

def defineInputs(): Int = {
    val z = x + 1
    z
}
我希望类中的所有方法都可以公开访问
z
的值,就像
x
y
一样


你能帮我一下吗?

你可以在类中定义一个
val
,如下所示:

scala> :pa
// Entering paste mode (ctrl-D to finish)

class SomeClass(x: Int, y: Int) {
  val z = x + 1
}

new SomeClass(0, 0).z

// Exiting paste mode, now interpreting.

defined class SomeClass
res0: Int = 1
您还可以使用case类:

scala> case class SomeClass(x: Int, y: Int) {
     |   val z = x + 1
     | }
defined class SomeClass

scala> SomeClass(0, 0).z
res0: Int = 1

您只需在类中定义
val
,如下所示:

scala> :pa
// Entering paste mode (ctrl-D to finish)

class SomeClass(x: Int, y: Int) {
  val z = x + 1
}

new SomeClass(0, 0).z

// Exiting paste mode, now interpreting.

defined class SomeClass
res0: Int = 1
您还可以使用case类:

scala> case class SomeClass(x: Int, y: Int) {
     |   val z = x + 1
     | }
defined class SomeClass

scala> SomeClass(0, 0).z
res0: Int = 1

“加载方法”是什么意思?也许“调用”是个更好的术语。修改。你所说的“加载方法”是什么意思?也许“调用”是一个更好的术语。谢谢。因为[提到“只有在模式匹配用于分解数据结构的情况下,定义案例类才有意义”,所以它可以在类本身中完成吗。我不同意这一说法,但是的,这是可以做到的!有关更多信息,请参阅我更新的答案。我在示例中使用
case类
的原因是Scala编译器自动生成
apply
方法(以及
unapply
方法)这就消除了在构造类的新实例时使用
new
关键字的需要。谢谢。这可以在类本身中完成吗,因为[提到“只有使用模式匹配分解数据结构时,定义案例类才有意义”。我不同意这一说法,但是的,这是可以做到的!有关更多信息,请参阅我更新的答案。我在示例中使用
case类
的原因是Scala编译器自动生成
apply
方法(以及
unapply
方法)这样在构造类的新实例时就不需要使用
new
关键字。