2011-02-09 18 views
4

Scalaで宣言的にリストを作成するにはどうすればよいですか?次のように言い換えると、その構造体を宣言すると同時に、それを初期化するには、私は、宣言リストを宣言することができますC#の場合

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

を.NETのリストとの違いやスカラ座での一覧を無視する(すなわち、別のコレクションタイプを自由に使用できます)、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#が "内容"からListのジェネリック型を推論できないのですか? – soc

+0

ここに表示されている構文へのリンクがありますか?それを読んでみたいです。 Javaのインスタンスイニシャライザブロックに似ていますか? – soc

+0

@soc - c#はリストを作成したいとは推測できません。私はそれを伝える必要があります。配列を必要とする場合は、 var users = new [] { new user {Name = "tom"、age = 12}、 new User {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#バージョンでは、デフォルトの引数なしコンストラクタを実際に呼び出していて、作成後にオブジェクトのプロパティを設定しています。設定しなかったプロパティはデフォルト値になります。上のコードを更新して、コンストラクタの既定のパラメータを使用して、スカラで最も近いと思われるものを表示しました –

+0

あなたのさらなる説明をありがとう。私は同意する、あなたのC#コードに最も近いようだ。 –

+0

@Rupert:それはScalaで違って見えますか?機能上、ScalaはC#より複雑な構文で、より多くの機能を提供するようです。または私は何かを逃していますか? – soc

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ごとに匿名クラスが作成されます。

関連する問題