Es gibt eine well known issue, wenn es um die Verwendung von .NET-Werttypen in IronPython geht. Dies hat mir kürzlich Kopfschmerzen bereitet, als ich versuchte, Python als eingebettete Skriptsprache in C# zu verwenden. Das Problem lässt sich wie folgt zusammenfassen:Wie behandelt man Wertetypen beim Einbetten von IronPython in C#?
eine C# struct wie Gegeben:
struct Vector {
public float x;
public float y;
}
Und eine C# Klasse wie:
class Object {
public Vector position;
}
Im Folgenden wird in Ironpython passieren:
Wie der Artikel sagt, bedeutet dies, dass Werttypen meist unveränderlich sind. Dies ist jedoch ein Problem, da ich eine Vektorbibliothek verwenden wollte, die wie oben beschrieben implementiert ist. Gibt es Workarounds für die Arbeit mit vorhandenen Bibliotheken, die Werttypen verwenden? Das Ändern der Bibliothek wäre der allerletzte Ausweg, aber das würde ich lieber vermeiden.
Funktioniert das? obj = Object() pos = Vector() pos.x = 1 obj.position = pos Druck obj.position.x –
Ja, das funktioniert. Mit einem geeigneten Konstruktor kann man auch 'obj.position = Vector (1,0)' verwenden. Dies könnte akzeptabel sein, obwohl das Verhalten, das ich in meiner Frage beschrieben habe, immer noch verwirrend wäre ... – kloffy