Scala:常数val或def

Ric*_*ver 1 scala constants

我已经为Hex网格获得了一个整数坐标结构,将其从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
}
Run Code Online (Sandbox Code Playgroud)

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

dhg*_*dhg 5

您应该将它们实现为val。的def关键字定义的方法,所以每一个被调用时,该方法将被执行。换句话说,与valCood对象将再次被创建和存储,但随着def新副本将被创建每次你去访问它。

如果您担心创建可能不使用的对象,则应尝试使用lazy val,它是仅在首次访问对象时填充的val。