在Scala中,如何在参数列表中表示事物和事物组合? X =(X |原子)*

时间:2011-06-10 07:26:46

标签: scala

我有* - 参数方法。我希望能够传递原子和团体的混合物 原子进入方法。理想情况下,我希望这些小组能够举办小组。

语法规则是:

X = (X | atom)*

小组需要订购,但不一定是班级列表。

动机是有许多调用* - 参数方法,并且这些调用中的一些参数组不止一次出现。我希望能够将这些组存储在val中以重复使用它们。

2 个答案:

答案 0 :(得分:4)

为什么不是这样的?

trait GroupOrAtom // or any other nicer name!
class Atom extends GroupOrAtom
class AtomGroup(val atoms: Seq[Atom]) extends GroupOrAtom

def process(elements: GroupOrAtom*) = ...

如果您正在寻找使用联合类型的更实际的方法,请尝试阅读Miles Sabin's amazing post on how to implement union types in Scala。但是,这可能不是您的首选,因为实现像GroupOrAtom这样的共同特征的解决方案更清晰,更容易。

答案 1 :(得分:1)

传递元组能为你工作吗?

def processor(tokens: Any) = // pattern match on tuples

processor('atom)
processor('atom1, 'atom2)
processor('atom1, ('atom2a, 'atom2b))