我可以告诉你哪里出了问题,但你想在这里做什么并不完全明显。
您已声明getLlength
(原文如此)方法返回一个类型Int
。然而,这个方法的主体只是一个println
调用,因此它将返回该调用的结果。println
返回类型为Unit
(因为它不返回任何内容,并且仅因其副作用而执行)。
因此你的方法是declared回来Int
,但是您已经以这样的方式实现了它,它的返回类型将是Unit
。这就是您收到编译时错误的原因。
您希望您的方法返回长度吗?如果是这样,你应该返回Length
而不是打印它。然而,更好的方法是 Scala 将构造函数参数标记为val
,它将自动为其生成一个访问器:
class Rectangle(val Length: Int, ...
现在任何人都可以参考例如ARectangle rect
对象可以调用rect.Length
得到长度。事实上,这是在 Scala 中访问字段和类字段属性的首选方式,而不是getJava 使用的 Foo 约定。
如果您真的只是想要一个允许某人访问命名参数的“容器”类,请考虑案例类别。您可以将功能等效的类定义为
case class Rectangle(length: Int, width: Int)
这会自动生成两个字段的访问器方法,这是明智的toString()
, equals()
and hashCode()
实现 - 并且您还可以获得模式匹配作为额外的好处。
任何时候你想要一个主要/完全只是一组字段的类,案例类应该是你的起点。
另请注意,Scala 中的变量按照约定采用小驼峰命名法。使用上层类名称声明字段/构造函数参数(即Length
代替length
)对于阅读你的代码的人来说令人惊讶地感到困惑,所以坚持惯例会给你自己和其他人一个好处。