2012-03-21 56 views
2

我在IronPython中编写了一个DSL。在C#中重载运算符并在python中使用 工作正常,直到您完成赋值(=)运算符。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 :(

我得到下面的异常:

Expected FloatValue, got float

我该如何使它工作?

回答

1

Python不支持单精度浮点值。因此,文字5.0(在IronPython的情况下)表示为System.Double

你可以改变你的DSL使用双精度或只是隐式转换下加入

public static implicit operator FloatValue(double value) 
{ 
    return new FloatValue(Convert.ToSingle(value)); 
} 
浮动