Я хочу переопределить оператор ^ в NCalc. В настоящее время он работает как побитовый оператор, и я хочу изменить его, чтобы он работал как Math.Pow.
Это потому, что он принимает данные от аналитика, который используется, чтобы превзойти формулы стиля, и использует ^ для этой цели.
Выше мой вопрос. Ниже приведена дополнительная информация для потомков:
Мой текущий подход заключается в том, чтобы вручную заменить «^» на «pow» во входной строке перед вычислением, но это плохая идея по нескольким причинам. Изучите текущую реализацию, которая принимает уравнение, разбитое на отдельные элементы: *
private static List<String> ReplacePow(this List<String> input) //called while(input.Contains("^))
{
var index = input.IndexOf("^");
List<String> res = new List<string>();
res.AddRange(input.Take(index - 1));
res.Add("Pow(");
res.Add(input.Skip(index - 1).FirstOrDefault());
res.Add(",");
if(input[index + 1] != "-")
{
res.Add(input.Skip(index + 1).FirstOrDefault());
}
else
{
res.AddRange(input.Skip(index + 1).Take(2));
index++;
}
res.Add(")");
res.AddRange(input.Skip(index + 2));
return res;
}
Как вы можете видеть, в этом коде есть явная проверка для обработки, если в Pow () передается отрицательное число.
Более того, эта реализация не будет работать хорошо, если мне нужно преобразовать из некоторого уравнения со сложными входными данными, идущими в pow, например:
5 ^ if (1 == 1, 2, -4)