Scala:作为构造函数的一部分调用方法
我在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
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
关键字。