2009-11-18 9 views
14

Jaki jest odpowiednik tego w IronPython? Czy to tylko blok try-finally?Co to jest odpowiednik bloku C# "using" w IronPython?

using (var something = new ClassThatImplementsIDisposable()) 
{ 
    // stuff happens here 
} 
+0

Dodajmy uprawnienia do tego wątku: http://lists.ironpython.com/ pipermail/users-ironpython.com/2008-July/007826.html –

+1

Nie widzę niczego, co jest istotne dla tego pytania. –

Odpowiedz

25

IronPython obsługującego użyciu IDisposable z with oświadczenie, więc można napisać coś takiego:

with ClassThatImplementsIDisposable() as something: 
    pass 
+0

Dobra opcja dla własnych typów, ale nie działa dla typów ram. –

+0

Jakiś szczególny powód, dla którego nie działa z typami ramowymi? –

+1

Jesteś pewien? Po prostu próbowałem z 'StreamWriter' i wydaje się działać zgodnie z oczekiwaniami. –

6

IronPython (jako kandydatów 2,6 uwalnianiu) umożliwia stwierdzenie with, który owija się IDisposable obiektu w sposób podobny do stosowania.

+0

Po prostu ciekawy - dlaczego spadły oceny? O ile mi wiadomo, jest to prawda - python, jako język, nie uwzględnia tego w języku. –

+2

-1 Python uwzględnia to, jest to instrukcja "z". – Javier

+0

@Javier Badi: Powiedz to ponownie, gdy już spróbujesz go użyć. – Teddy

0

bloku Using jest w rzeczywistości następujące pod maską:

try { 
    (do something unmanaged here) 
} 
finally { 
    unmanagedObject.Dispose(); 
} 

nadzieję, że to pomoże Ci zrozumieć logikę w użyciu instrukcji.

4

With statement. Na przykład:

with open("/temp/abc") as f: 
    lines = f.readlines() 
+0

To nie obsługuje IDisposable po wyjęciu z pudełka. Działa z typami Pythona z podaną procedurą __exit__. –

Powiązane problemy