人们为什么定义对象扩展其伴侣类?

时间:2011-02-14 11:31:57

标签: scala

我发现这种代码在Lift框架中很常见,写得像这样:
 object BindHelpers extends BindHelpers {} 这是什么意思?

4 个答案:

答案 0 :(得分:6)

在这种情况下,BindHelpers是一个特征,而不是一个类。让foo()成为BindHelpers中定义的方法,您也可以访问它。

  1. 通过配套对象使用它:BindHelpers.foo()

  2. 在类中混合特征BindHelpers,从而能够访问其中的方法。

  3. 例如:

    class MyClass extends MyParentClass with BindHelpers {
      val a = foo()
    }
    

    例如,在Scalatest中使用相同的技术{.1}。

答案 1 :(得分:3)

您可以在liftweb组中找到同一问题的David Pollak's answer

答案 2 :(得分:2)

object扩展其伴侣类很有意思,因为它与类的类型相同。

如果object BindHelpers未扩展BindHelpers,则其类型为BindHelpers$

答案 3 :(得分:2)

这里的模式可能是其他模式。我不知道Lift会回答这个问题,但object存在问题,因为它们不可模仿。因此,如果您在class中定义了可以模拟的所有内容,然后只是让对象扩展它,您可以模拟该类并使用它而不是测试中的对象。