¿Cuál es el equivalente de esto en IronPython? ¿Es solo un bloque try-finally?¿Cuál es el equivalente del bloque C# "using" en IronPython?
using (var something = new ClassThatImplementsIDisposable())
{
// stuff happens here
}
¿Cuál es el equivalente de esto en IronPython? ¿Es solo un bloque try-finally?¿Cuál es el equivalente del bloque C# "using" en IronPython?
using (var something = new ClassThatImplementsIDisposable())
{
// stuff happens here
}
IronPython admite el uso de IDisposable
con with
declaración, por lo que puede escribir algo como esto:
with ClassThatImplementsIDisposable() as something:
pass
Buena opción para sus propios tipos, pero no funciona para tipos de marcos. –
¿Alguna razón particular por la que no funciona con tipos de marcos? –
¿Estás seguro? Acabo de probar con 'StreamWriter' y parece funcionar como se esperaba. –
IronPython (como de los candidatos 2.6 de liberación) apoya la declaración with
, que envuelve un objeto IDisposable de una manera similar al uso.
el bloque usando es de hecho la siguiente bajo el capó:
try {
(do something unmanaged here)
}
finally {
unmanagedObject.Dispose();
}
Espero que esto ayude a entender la lógica detrás de la instrucción using.
No es la declaración with
: http://www.ironpythoninaction.com/magic-methods.html#context-managers-and-the-with-statement
with open(filename) as handle:
data = handle.read()
...
No. La instrucción "con" solo funciona con objetos bloqueables, a qué categoría pertenecen los objetos de archivo. No funciona * * con tipos arbitrarios, por ejemplo, enteros. – Teddy
With statement. Por ejemplo:
with open("/temp/abc") as f:
lines = f.readlines()
Esto no es compatible con IDisposable fuera de la caja. Funciona con tipos de python con una rutina __exit__ especificada. –
Vamos a añadir algo de autoridad a este tema: http://lists.ironpython.com/ pipermail/users-ironpython.com/2008-July/007826.html –
No veo nada relevante para esta pregunta. –