min*_*olf 1 syntax constructor scala
我无法理解为什么这段代码错了,错误信息是:
error: '}' expected but '.' found.
Run Code Online (Sandbox Code Playgroud)
在线
this.tX = cX
Run Code Online (Sandbox Code Playgroud)
码:
class Quaternion {
private var tX: Float = 0
private var tY: Float = 0
private var tZ: Float = 0
private var tW: Float = 1
def this(cX: Float, cY: Float, cZ: Float, cW: Float) {
this.tX = cX
this.tY = cY
this.tZ = cZ
this.tW = cW
}
...
Run Code Online (Sandbox Code Playgroud)
请帮我解决我可能明显的错误.
Jat*_*tin 10
参考喜欢总是回答它(§5.3.1和例子5.3.3):
为了防止构造函数调用的有限循环,有一个限制,即每个自构造函数调用必须引用它之前的构造函数定义(即它必须引用前面的辅助构造函数或类的主构造函数).
在您的情况下,将其更改为:
def this(cX: Float, cY: Float, cZ: Float, cW: Float) {
this()
this.tX = cX
this.tY = cY
this.tZ = cZ
this.tW = cW
}
Run Code Online (Sandbox Code Playgroud)
我强烈建议使用带有伴生对象、构造函数重载或默认值的不可变案例类:
case class Quaternion(cX: Float, cY: Float, cZ: Float, cW: Float)
object Quaternion {
def apply() = new Quaternion(0,0,0,1)
}
scala> Quaternion()
res0: Quaternion = Quaternion(0.0,0.0,0.0,1.0)
Run Code Online (Sandbox Code Playgroud)
或者
case class Quaternion(cX: Float, cY: Float, cZ: Float, cW: Float) {
def this() = this(0,0,0,1)
}
scala> new Quaternion()
res2: Quaternion = Quaternion(0.0,0.0,0.0,1.0)
Run Code Online (Sandbox Code Playgroud)
或者
case class Quaternion(cX: Float = 0, cY: Float = 0, cZ: Float = 0, cW: Float = 1)
scala> Quaternion()
res0: Quaternion = Quaternion(0.0,0.0,0.0,1.0)
Run Code Online (Sandbox Code Playgroud)
如果需要更改 var,可以随时使用复制方法。
我认为你应该考虑将这个作为一个案例类,并且是不可变的.这看起来像这样(nb.通常我更喜欢双打浮动):
case class Quaternion(tX: Double = 0.0, tY: Double = 0.0, tZ: Double = 0.0, tW: Double = 1.0)
Run Code Online (Sandbox Code Playgroud)
然后可以根据以下示例创建实例:
scala> val qDefault = Quaternion()
qDefault: Quaternion = Quaternion(0.0,0.0,0.0,1.0)
scala> val q1234 = Quaternion(1,2,3,4)
q1234: Quaternion = Quaternion(1.0,2.0,3.0,4.0)
scala> val q0101 = Quaternion(tY = 1.0)
q0101: Quaternion = Quaternion(0.0,1.0,0.0,1.0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2637 次 |
| 最近记录: |