4

C#では、リストを宣言的に宣言できます。つまり、次のように、リストの構造を宣言し、同時に初期化できます。

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

.NetのリストとScalaのリストの違いを無視すると(つまり、別のコレクションタイプを自由に使用できます)、Scala 2.8で同様のことを行うことは可能ですか?

アップデート

トーマスのコードを下から適応させるこれは、示されている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タペルクラスを使用することもできます。

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

トーマスのコードを下から適応させるこれは、示されている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))

no argsコンストラクターを使用してプロパティを設定するのではなく、デフォルト値を使用して明示的なコンストラクターを提供しているため、C#コードの動作とは微妙に異なりますが、最終的な結果は同等です。

于 2011-02-17T13:44:59.350 に答える