Scala中的C++嵌套类

Jas*_*siu 1 scala nested-class

我正在学习Scala,而且我来自C++(很少有Java经验).我工作的地方经常使用以下模式:

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

int main() {
  SomeClass::Options options;
  options.a = ...;
  ...
  SomeClass* sc = new SomeClass(options);
}
Run Code Online (Sandbox Code Playgroud)

我如何在Scala中模拟它?

Tom*_*icz 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)
}
Run Code Online (Sandbox Code Playgroud)

有关嵌套类的更多信息(不要与Java中的内部类混淆):scala中的静态内部类.

评论:

  • Options嵌套在SomceClass 对象内,而不是class
  • Options可以是case class- 这样你就可以免费获得不变性和访问者
  • 在Scala中,您可以非常简洁地定义一个主要构造函数
  • 各种:默认情况下,Scala使用传递引用,所有变量实际上都是指针(与C++相比,额外的符号更少).