1

我有一个十六进制网格的整数坐标结构,我将其从 C# 移植到 Scala,如下所示:

object Cood
{
  def Up = new Cood(0, 2)
  def UpRight = new Cood(1, 1)
  def DownRight = new Cood(1,- 1)
  def Down = new Cood(0, - 2)
  def DownLeft = new Cood(- 1, - 1)
  def UpLeft = new Cood(- 1, + 1)
  def None = new Cood(0, 0)
}

class Cood(val x: Int, val y: Int)
{
   //more code
}

由于非基本类型没有常量,因此它们是静态获取属性。在 Scala 中,我应该将它们实现为 def 或 val 还是无关紧要?

4

2 回答 2

5

您应该将它们实现为val. def关键字定义了一个方法,所以每次调用都会执行该方法。换句话说,with对象valCood被创建一次并存储,但def每次访问它时都会创建一个新副本。

如果您担心创建可能不会使用的对象,那么您应该尝试lazy val,这是一个仅在第一次访问时填充的 val。

于 2012-05-10T01:19:24.213 回答
2

您可能应该将 Cood 类实现为案例类

case class Cood(x: Int, y: Int)

就是这样,不需要额外的 getter / setter、相等方法、toString 或用于模式匹配的提取器。

但是,如果您只想将其作为普通类,只需编写class Cood(val x: Int, val y: Int).

于 2012-05-10T01:32:20.167 回答