Scala 中的 C++ 嵌套类
Posted
技术标签:
【中文标题】Scala 中的 C++ 嵌套类【英文标题】:C++ nested classes in Scala 【发布时间】:2012-05-15 13:29:39 【问题描述】:我正在学习 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】:这是等价的:
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
object 中,而不是 class
Options
可以是 case class
- 这样您就可以免费获得不变性和访问器
在 Scala 中,您有一个以非常简洁的方式定义的主要构造函数
各种:Scala 默认使用按引用传递,所有变量实际上都是指针(与 C++ 相比,额外的符号更少)。
【讨论】:
如果有很多选项,你甚至可以使用命名参数使其更清晰。 嗯,看起来有点 hack-ish。假设我有一个类 (SomeClass
) 和一堆相关的帮助类,它们仅在 SomeClass
的上下文中才有意义(例如,在我的示例中为 Options
)。在 C++ 中,我可以嵌套所有相关的辅助类或引入类似 detail
/internal
命名空间的东西。在 Scala 中这样做的首选方法是什么?请注意,关系是一些类和一个类之间的关系,而不是这个类的实例,所以我在这里不需要/想要依赖类型。
@Jasiu 您可以在 Scala 中将(子)类设为私有,它只会被对象及其类伴侣看到。以上是关于Scala 中的 C++ 嵌套类的主要内容,如果未能解决你的问题,请参考以下文章