1

私はScalaを学んでおり、C ++(Javaの経験はほとんどありません)から来ています。私が働いている場所では、次のパターンをよく使用します。

class SomeClass {
 public:
  class Options {
    ...
  };
  SomeClass(const Options& options);
  ...
};

int main() {
  SomeClass::Options options;
  options.a = ...;
  ...
  SomeClass* sc = new SomeClass(options);
}

Scalaでそれをエミュレートするにはどうすればよいですか?

4

1 に答える 1

5

これは一種の同等です:

object SomeClass {
    case class Options(option1: String, option2: Boolean)
}

class SomeClass(options: Options) {

    //this is constructor!
    println(options.option1)

}

object Main extends App {
    val options = SomeClass.Options("One", false)
    //or even:    SomeClass.Options(option1 = "One", option2 = false)
    val sc = new SomeClass(options)
}

ネストされたクラスの詳細 (Java の内部クラスと混同しないでください): static inner classes in scala

コメント:

  • OptionsSomceClass オブジェクト内にネストされていますが、そうではありませんclass
  • Optionsすることができますcase class-この方法では、不変性とアクセサーを無料で取得できます
  • Scala では、非常に簡潔な方法で定義された 1 つのプライマリ コンストラクターがあります。
  • さまざま: Scala はデフォルトで参照渡しを使用し、すべての変数は実際にはポインターです (C++ に比べて余分なシンボルが少ない)。
于 2012-05-15T13:34:36.673 に答える