2014-10-28 2 views
0

У меня есть следующая проблема (язык программирования: SCALA): Производный класс D должен вычислять параметры базового класса с несколькими длительными вычислениями от своих собственных параметров:вычислительные базовый класс из производного класса

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

Теперь я, кажется, есть 3 возможности:

(а) положить тело F (а, б) непосредственно в конструкторе B: B ({...})

(б) определить, как е статическая функция в сопутствующем объекте D

(с) определяют е как функции члена D, которое случается быть статическим

(а), кажется, очень некрасиво. Являются ли эти подходы даже законными? Что вы хотите сделать?

Я задаю вопрос, так как я начинаю с scala, и наша организация на самом деле не установила scala, поэтому я могу делать эксперименты только периодически дома.

Спасибо за все ответы.

+1

Я поеду с (b), но IHMO этот вопрос лучше в «обзоре кода», чем SO – gwenzek

ответ

1

apply Реализация метода в объекте-компаньона, который преобразовать конструктор Params соответствующим образом

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

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

Если вам нужно всегда трансформировать аргументы конструктора думать о правильности вашего API. Я считаю, что обзор кода помогает сделать этот код лучше.

+0

Это изящно, спасибо. –

0

Я бы использовал a), если мне не нужно было повторно использовать функцию в другом месте. Функция должна идти куда-то, почему не там, где она фактически используется? Но это в основном эстетический выбор; б) тоже хорошо. Если это функция, которую нужно вызвать из другого места, я бы пошел с б). Я бы не использовал c); независимо от того, является ли это законным, это, безусловно, вводит в заблуждение и может вызвать проблемы с обслуживанием, когда будущий редактор предполагает, что это нормальная функция-член.

Смежные вопросы