4

在 C# 中,我可以声明式地声明一个列表,换句话说,声明它的结构并同时对其进行初始化,如下所示:

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

忽略 .Net 中的 List 和 Scala 中的 List 之间的差异(即,随意使用不同的集合类型),是否可以在 Scala 2.8 中做类似的事情?

更新

从下面调整 Thomas 的代码我相信这是与所示 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

4 回答 4

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))
于 2011-02-09T13:23:40.967 回答
4
val users = User("tom", 12) :: User("bill", 23) :: Nil

你也可以使用 Scalas tupel 类:

val users = ("tom", 12) :: ("bill", 23) :: Nil
于 2011-02-09T13:51:14.123 回答
3

或者您可以通过这种方式在不使用编译模块中定义的显式类的情况下创建对象

List(
   new {var name = "john"; var age = 18},
   new {var name = "mary"; var age = 21}
)
请注意,此代码有一些严重的缺陷,它会为每个new.

于 2011-02-09T18:07:36.593 回答
1

从下面调整 Thomas 的代码我相信这是与所示 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# 代码的行为方式略有不同,因为我们提供了具有默认值的显式构造函数,而不是使用无参数构造函数并随后设置属性,但最终结果是可比较的。

于 2011-02-17T13:44:59.350 回答