在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))
答案 0 :(得分: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 :(得分:4)
val users = User("tom", 12) :: User("bill", 23) :: Nil
您也可以使用Scala元组类:
val users = ("tom", 12) :: ("bill", 23) :: Nil
答案 2 :(得分:3)
或者您可以在不使用编译模块中定义的显式类的情况下创建对象
List(
new {var name = "john"; var age = 18},
new {var name = "mary"; var age = 21}
)
请注意,此代码有一些严重的缺点,它将为每个new
创建一个匿名类。
答案 3 :(得分: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#代码的行为方式略有不同,因为我们提供了一个带有默认值的显式构造函数,而不是使用no args构造函数并随后设置属性,但最终结果具有可比性。