这个问题更笼统,并扩展到类型化的非OOP语言,但是为了有代码证明我的意图,我将坚持使用诸如C#之类的标准花括号语言。
我见过的OOP语言支持两种复合接口
interface ISyntaxNode : ISyntax, INode {}
ISyntaxNode node;
// Do stuff with node
还有一些复合类的概念
class SyntaxNode {
// Members are public/private/partially exposed/whatever
ISyntax code;
INode node;
}
SyntaxNode node;
// Do stuff with node
但是在两种情况下,都需要在使用复合类型之前明确定义复合类型及其行为方式。是否有任何语言支持某些隐式复合类型的概念?例如
ISyntax INode node;
这在具有隐式接口概念的语言中会更有用/更灵活,以便您以后可以定义类似ISyntaxNode
之类的内容,并且仍然使node
成为其中之一而无需更改代码,但我很好奇是否有人在野外看到过这种模式。我的google-foo试图回答这个问题有点简短。
答案 0 :(得分:3)
Scala中的Compound Types与您所描述的非常相似。复合类型允许在声明变量/参数时枚举类型
val myVal: Type1 with Type2 with TypeN = new Type1 with Type2 with TypeN