Как декларативно создать список в Scala? - PullRequest
4 голосов
/ 09 февраля 2011

В C # я могу объявить список декларативно, другими словами, объявить его структуру и инициализировать его одновременно следующим образом:

var users = new List<User>
            {
                new User {Name = "tom", Age = 12}, 
                new User {Name = "bill", Age = 23}
            };

Игнорируя различия между списком в .Net и списком в Scala (т. Е. Не стесняйтесь использовать другой тип коллекции), возможно ли сделать что-то подобное в Scala 2.8?

UPDATE

Адаптация кода Томаса снизу. Я считаю, что это ближайший эквивалент показанного кода C #:

class User(var name: String = "", var age: Int = 0)

val users = List(
  new User(name = "tom", age = 12), 
  new User(name = "bill", age = 23))

Ответы [ 4 ]

20 голосов
/ 09 февраля 2011

Как насчет:

case class User(name: String, age: Int)

val users = List(User("tom", 12), User("bill", 23))

, который даст вам:

users: List[User] = List(User(tom,12), User(bill,23))
4 голосов
/ 09 февраля 2011
val users = User("tom", 12) :: User("bill", 23) :: Nil

Вы также можете использовать класс скалы Скала:

val users = ("tom", 12) :: ("bill", 23) :: Nil
3 голосов
/ 09 февраля 2011

Или вы можете создавать объекты без использования явного класса, определенного в модуле компиляции, таким образом

List(
   new {var name = "john"; var age = 18},
   new {var name = "mary"; var age = 21}
)
Обратите внимание, что у этого кода есть серьезный недостаток, он создает анонимный класс для каждого new.
1 голос
/ 17 февраля 2011

Адаптация кода Томаса снизу. Я считаю, что это ближайший эквивалент показанного кода C #:

class User(var name: String = "", var age: Int = 0)

val users = List(
  new User(name = "tom", age = 12), 
  new User(name = "bill", age = 23))

Он несколько отличается от поведения кода C #, поскольку мы предоставляем явный конструктор со значениями по умолчанию, а не используем конструктор no args и задаем свойства впоследствии, но конечный результат сопоставим.

...