【发布时间】:2010-04-18 23:12:02
【问题描述】:
在 IronPython 中使用 .NET 值类型时,有一个 well known issue。最近,当我尝试在 C# 中使用 Python 作为嵌入式脚本语言时,这让我很头疼。问题可以总结如下:
给定一个 C# 结构,例如:
struct Vector {
public float x;
public float y;
}
还有一个 C# 类,例如:
class Object {
public Vector position;
}
IronPython 中会发生以下情况:
obj = Object()
print obj.position.x # prints ‘0’
obj.position.x = 1
print obj.position.x # still prints ‘0’
正如文章所述,这意味着值类型大多是不可变的。但是,这是一个问题,因为我正计划使用如上所示实现的向量库。是否有任何解决方法可以使用依赖于值类型的现有库?修改库将是最后的手段,但我宁愿避免这样做。
【问题讨论】:
-
这行得通吗? obj = Object() pos = Vector() pos.x = 1 obj.position = pos print obj.position.x
-
是的,这行得通。通过适当的构造函数,也可以使用
obj.position = Vector(1,0)。这可能是可以接受的,即使我在问题中描述的行为仍然令人困惑......
标签: c# .net ironpython embedding value-type