1

次のように、C#からScalaに移植するHexグリッドの整数座標構造があります。

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
}

非基本型の定数がなかったため、静的なgetプロパティでした。Scalaでは、それらをdefまたはvalとして実装する必要がありますか、それとも問題ではありませんか?

4

2 に答える 2

5

それらをとして実装する必要がありますval。キーワードはメソッドを定義するため、def呼び出されるたびにメソッドが実行されます。つまり、valオブジェクトCoodは一度作成されて保存されdefますが、アクセスするたびに新しいコピーが作成されます。

使用されない可能性のあるオブジェクトの作成が心配な場合は、を試してみてくださいlazy val。これは、最初にアクセスされたときにのみ入力される値です。

于 2012-05-10T01:19:24.213 に答える
2

おそらく、Cood クラスをケース クラスとして実装する必要があります。

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

それだけです。追加の getter / setter、equality メソッド、toString、またはパターン マッチング用の抽出器は必要ありません。

ただし、通常のクラスとしてのみ必要な場合は、class Cood(val x: Int, val y: Int).

于 2012-05-10T01:32:20.167 に答える