2011-02-09 2 views
4

В C# я могу объявить список декларативно, другими словами, объявить его структуру и отформатируйте ее в то же время выглядит следующим образом:Как декларативно создать список в Scala?

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

Игнорирование различий между списками в .Net и List в 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)) 
+0

Нужно ли писать ''? Не может ли C# вывести общий тип списка из «содержимого»? – soc

+0

У вас есть ссылка на этот синтаксис, который вы показываете здесь? Хотелось бы это прочитать. Это похоже на блоки инициализатора экземпляра Java? – soc

+0

@soc - C# не может сделать вывод, что я хочу создать список, мне нужно сказать об этом. Если бы мне нужен массив, я мог бы сделать следующее: var users = new [] { новый пользователь {Name = "tom", Age = 12}, новый пользователь {Name = "bill", Age = 23} }; вот ссылка на описание синтаксиса: http://msdn.microsoft.com/en-us/library/bb384062.aspx –

ответ

1

Адаптация кода Томаса снизу, я считаю, что это ближайший эквивалент 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 и определения свойств впоследствии, но конечный результат сопоставим.

20

насчет:

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)) 
+1

Спасибо за ваш ответ, это очень полезно, но тонко отличается от того, как ведет себя код C#, потому что мы предоставляем явный конструктор, который должен быть выполнен. В версии C# мы фактически вызываем конструктор без аргументов args и затем устанавливаем свойства объекта после его создания, любые свойства, которые мы не задаем, имеют только значения по умолчанию. Я обновил свой код выше, чтобы показать, что, по моему мнению, ближайший эквивалент Scala, используя параметры по умолчанию для конструктора –

+0

Я вижу. Спасибо за ваше дальнейшее объяснение.Я согласен, что, кажется, ближе всего к вашему C# -коду. –

+0

@Rupert: Проблема в том, что в Scala она выглядит иначе? По-видимому, Scala предоставляет больше функциональности, с менее сложным синтаксисом, чем C#. Или я чего-то не хватает? – soc

4
val users = User("tom", 12) :: User("bill", 23) :: Nil 

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

val users = ("tom", 12) :: ("bill", 23) :: Nil 
3

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

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

Смежные вопросы