我正在学习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中模拟它?
答案 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
- 这样您就可以免费获得不变性和访问者