Scala中的C ++嵌套类

时间:2012-05-15 13:29:39

标签: 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);
}

如何在Scala中模拟它?

1 个答案:

答案 0 :(得分: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

评论:

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