Должны ли индексаторы всегда ссылаться на дискретную последовательность?У меня возникает соблазн думать «нет», но я хотел бы спросить, что думают другие.
Вопрос возник после того, как в классе полиномов был сделан «ярлык».
Polynomial p = new Polynomial(coefficients);
Нормальный способдля вычисления y = p (5.2) использовался следующий вызов метода:
double y = p.Evaluate(5.2);
Созданное сочетание клавиш (с использованием индексатора типа double) было:
double y = p[5.2];
Iдумаю, идея заключалась в том, что полином (непрерывная функция) рассматривается как своего рода аналоговый массив или непрерывный массив, если это имеет смысл.Однако функция Evaluate происходит из интерфейса IMathFunction.Этот интерфейс также используется в классе интерполяции:
CubicSplineInterpolator f = new CubicSplineInterpolator(arrayOfPoints)
Здесь есть проблема, поскольку классы интерполятора уже имеют открытый индексатор типа int для доступа к своему массиву точек, используемых для интерполяции.Интерполятор может действовать как непрерывная функция (в своих пределах), но если ярлык распространяется на все классы IMathFunction, то f [5.0] и f [5] возвращают разные объекты и могут сбивать с толку при чтении кода.
double y;
Point<double> p;
// ... some other code
CubicSplineInterpolator f = new CubicSplineInterpolator(arrayOfPoints)
y = f[5.0];
p = f[5];
Должен ли я беспокоиться об использовании индексатора типа double или для этого их следует использовать?