从派生类计算基类参数

时间:2014-10-28 08:10:18

标签: class scala parameters base

我有以下问题(编程语言:scala): 派生类D必须通过稍微冗长的计算来计算基类参数 从它自己的参数:

class D(a:Int,b:Int) extends B(f(a,b)) {...}  

现在我似乎有三种可能性:

(a)将f(a,b)的主体直接放在B:B的构造函数中({...})

(b)将f定义为D

的伴随对象中的静态函数

(c)将f定义为D的成员函数,恰好是静态的

(a)似乎非常不优雅。 这些方法是否合法? 你会做什么?

我问这个问题,因为我开始使用scala,而我们的组织实际上并没有安装scala,所以我只能在家里间歇性地进行实验。

感谢所有回复。

2 个答案:

答案 0 :(得分:1)

在伴侣对象中实现apply方法,以适当的方式转换构造函数params

object B {
  def f(a: Int) = a

  def apply(a: Int, b: Int) = new B(f(a), f(b))
}

如果您需要始终转换构造函数参数,请考虑API的正确性。我认为代码审查有助于使代码更好。

答案 1 :(得分:0)

如果我不需要在其他地方重用该功能,我会使用a)。功能必须去某个地方,为什么不在它实际使用的地方呢?但这主要是一种美学选择; b)也没关系。如果它是需要从其他地方调用的函数,那么我将使用b)。我不会用c);当未来的编辑认为这是正常的成员函数时,它是否合法,它肯定会产生误导并可能导致维护问题。