Я пишу DSL в IronPython.Перегрузка операторов в C # и их использование в python работает нормально, пока вы не получите оператор присваивания (=
).
Использование неявной перегрузки приведения решает проблему на стороне C #, но не работает вpython.
Это минимальный пример, который воспроизводит ошибку:
class FloatValue
{
public FloatValue(float value)
{
this.value = value;
}
public static implicit operator FloatValue(float value)
{
return new FloatValue(value);
}
public float value;
}
Затем я выполняю:
FloatValue value = 5.0f // It works!!!
Но в Python:
# value is already an instance of FloatValue, it comes from somewhere. It's considered
# an immutable value, so there is no problem with generating a new instance.
value = 5.0 # Assigns the value, but does not work :(
Я получаю следующее исключение:
Ожидаемое FloatValue, есть число с плавающей запятой
Как я могу заставить его работать?