using-catch
От: _nn_ www.nemerleweb.com
Дата: 02.11.11 13:54
Оценка: -1
В Nemerle есть макрос using-catch:

using System;

class X : IDisposable
{
  public Dispose() : void {}
}

class P
{
 static Main() : void
 {
   using (x = X())
   {
    Console.WriteLine("A");
   }
   catch
   {
     | _ => Console.WriteLine("B");
   } 
 }
}


Однако генерируемый код Main эквивалентен:
def x = X();
try {  ... }
catch { ... }
finally { (x :> IDisposable).Dipose(); }


А не:

try
{
  using (x = X())
  {
   ...
  }
}
catch { ... }


Это может быть неочевидно. (Я как раз ожидал второе поведение)

Также нет способа выбрать куда ставить catch.
Аналогичная проблема возникнет если захотим реализовать using-finally.

Возможно ли придумать синтаксис с которым можно будет это решить красиво ?
Типа:
using (x = X()) { ... }
catch create { ... }
catch { ... }
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.