2011-02-09 56 views
4

在C#我可以声明声明一个列表,换句话说声明其结构,并在同一时间进行初始化,如下所示:我如何在Scala中声明创建一个列表?

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

是否需要编写'`?不能C#从“内容”推断列表的通用类型? – soc 2011-02-09 14:49:00

+0

你有链接到这里显示的语法吗?希望读到那个。它与Java的实例初始化块相似吗? – soc 2011-02-09 14:57:40

回答

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#代码的行为,因为我们提供默认的显式构造的方式稍有不同值,而不是随后使用无参数构造函数和设置属性,但最终结果是可比的。

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)) 
4
val users = User("tom", 12) :: User("bill", 23) :: Nil 

你也可以使用Scalas三元组类:

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

或者你也可以不使用你的编译模块以这种方式定义

List(
    new {var name = "john"; var age = 18}, 
    new {var name = "mary"; var age = 21} 
) 
注显式类的创建对象,这段代码有一些严重的缺点,它会为每个 new创建一个匿名类。

相关问题