我有以下问题(编程语言: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,所以我只能在家里间歇性地进行实验。
感谢所有回复。
答案 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);当未来的编辑认为这是正常的成员函数时,它是否合法,它肯定会产生误导并可能导致维护问题。