2012-03-21 47 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)); 
} 
浮動