Скала конструктор - PullRequest
       3

Скала конструктор

6 голосов
/ 14 февраля 2011

Что эквивалентно приведенному ниже Java-коду в Scala:

import java.util.Random;

public class Bool {

 private boolean door;
 Random random = new Random();

 Bool() {
  this.door = random.nextBoolean();
 }
}

Таким образом, при создании нового объекта Bool переменная двери автоматически получит случайное логическое значение.

Ответы [ 3 ]

11 голосов
/ 14 февраля 2011

В Scala тело класса эквивалентно методам, вызываемым конструктором в Java. Следовательно, ваш класс будет выглядеть примерно так:

import java.util.Random

class Bool {
    private val random = new Random
    private val door = random.nextBoolean()

    ... // method definitions, etc.
}

(обратите внимание, что чтобы быть разборчивым, поскольку вы не объявили свои переменные Java final, можно утверждать, что поля должны быть здесь var s. Кроме того, ваше поле random защищено пакетом, выглядит как недосмотр, и будет отображаться в Scala как protected[pkgName], где pkgName - это имя наиболее конкретного компонента пакета класса.)

5 голосов
/ 14 февраля 2011

Вот мой дубль:

case class MyBool(door: Boolean = Random.nextBoolean)

Это оставляет открытой возможность создать новый экземпляр MyBool с определенным значением двери, например:

val x1 = MyBool() // random door
val x2 = MyBool(true) // door set explicitly

Так какможет быть только два разных значения двери, имеет смысл вместо этого использовать статические объекты, например:

sealed trait MyBool {
  def door:Boolean
}
object MyBool {
  case object True extends MyBool {
    def door = true
  }

  case object False extends MyBool {
    def door = false
  }

  def apply:MyBool = if(Random.nextBoolean) True else False
}

Использование:

val x1 = MyBool() // random door value
val x2 = MyBool.True // explicit door value
3 голосов
/ 14 февраля 2011

Чем ближе код скалы должен быть:

class Bool {
  var random = new Random
  private var door = random.nextBoolean
}

Даже если публичное поле random не выглядит хорошей идеей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...