Подписка на события внутри локальных методов. Баг или фича?
От: Ziaw Россия  
Дата: 25.11.10 14:12
Оценка:
      def s(item, action)
      {
        //   vvv Error: needed writable value, got [event 'System.Windows.Forms.ToolStripItem.Click']
        item.Click += fun(_, _) { action() } 
      }
      
      s(openToolStripButton, openFile);
      
      openToolStripButton.Click += fun(_, _) { openFile() } // ok


при этом типы выводит вполне нормально.
Re: Подписка на события внутри локальных методов. Баг или фи
От: hardcase Пират http://nemerle.org
Дата: 25.11.10 14:15
Оценка:
Здравствуйте, Ziaw, Вы писали:


Так фурычит?
item.add_Click(fun(_) { action() });
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Подписка на события внутри локальных методов. Баг или
От: Ziaw Россия  
Дата: 25.11.10 14:40
Оценка:
Здравствуйте, hardcase, Вы писали:

H>
H>item.add_Click(fun(_) { action() });
H>


так фурычит
Re: Подписка на события внутри локальных методов. Баг или фи
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.11.10 18:03
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>
Z>      def s(item, action)
Z>      {
Z>        //   vvv Error: needed writable value, got [event 'System.Windows.Forms.ToolStripItem.Click']
Z>        item.Click += fun(_, _) { action() } 
Z>      }
      
Z>      s(openToolStripButton, openFile);
      
Z>      openToolStripButton.Click += fun(_, _) { openFile() } // ok
Z>


Z>при этом типы выводит вполне нормально.


Судя по бредовости сообщения — баг. Кинь в меня минимальным примером воспроизводящим этот баг.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Подписка на события внутри локальных методов. Баг или
От: Ziaw Россия  
Дата: 26.11.10 07:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Судя по бредовости сообщения — баг. Кинь в меня минимальным примером воспроизводящим этот баг.


using System;

class TestClass
{
  public event TestEvent : EventHandler;
  
  public static Main(): void
  {
      def test = TestClass();
      
      test.TestEvent += (_, _) => (); // ok
      
      def local(test)
      {
          test.TestEvent += (_, _) => (); // fail
      }
      
      local(test)
  }
}


P.S. Накидывал пример в npad. Без комплишена и хинтов на выводе типов грустно, но в остальном вполне приятно и юзабельно, вполне может служить заменой notepad для правки исходников.
Re[3]: Подписка на события внутри локальных методов. Баг или
От: hardcase Пират http://nemerle.org
Дата: 26.11.10 07:27
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>P.S. Накидывал пример в npad. Без комплишена и хинтов на выводе типов грустно, но в остальном вполне приятно и юзабельно, вполне может служить заменой notepad для правки исходников.


Я плагином к SharpDevelop пользуюсь.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Подписка на события внутри локальных методов. Баг или
От: Ziaw Россия  
Дата: 26.11.10 07:43
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Ziaw, Вы писали:


Z>>P.S. Накидывал пример в npad. Без комплишена и хинтов на выводе типов грустно, но в остальном вполне приятно и юзабельно, вполне может служить заменой notepad для правки исходников.


H>Я плагином к SharpDevelop пользуюсь.


=) Ну девелопом и студия одного ранга инструменты, а пад в другой весовой категории и грузится моментально.

Насколько легко прикрутить автокомплит для одного файла?
Re[5]: Подписка на события внутри локальных методов. Баг или
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.10 15:28
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Насколько легко прикрутить автокомплит для одного файла?


Не очень сложно, но из-за хинтов на ВПФ это будет работать только под виндой. Ну, и грузиться тоже по медленее будет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Подписка на события внутри локальных методов. Баг или
От: hardcase Пират http://nemerle.org
Дата: 26.11.10 15:37
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>=) Ну девелопом и студия одного ранга инструменты, а пад в другой весовой категории и грузится моментально.


Z>Насколько легко прикрутить автокомплит для одного файла?


Надо захостить компилятор (IEngine) и сообщать ему об изменениях исходника. В нужный момент просто спрашивать у него список на автоподстановку.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: Подписка на события внутри локальных методов. Баг или
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.10 15:56
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>=) Ну девелопом и студия одного ранга инструменты, а пад в другой весовой категории и грузится моментально.


Z>Насколько легко прикрутить автокомплит для одного файла?


Откровенно говоря превращать тулзу основное назначение которой — демонстрация мелких примеров в микро-IDE не очень хорошая идея, но в приципе если бы она понимала формат тестов компилятора, то ее было бы удобно использовать для написания компиляторы тестов. А то сейчас это вызывает небольшой геморрой, так как при добавлении файла в проект он копируется, а без этого нет коплита.

Так что если прикрутить комплит с хинтами и научить ее читать комментарии в формате компиляторых тестов — получилось бы средство двойного назначения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Подписка на события внутри локальных методов. Баг или
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.10 18:27
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>
Z>using System;

Z>class TestClass
Z>{
Z>  public event TestEvent : EventHandler;
  
Z>  public static Main(): void
Z>  {
Z>      def test = TestClass();
      
Z>      test.TestEvent += (_, _) => (); // ok
      
Z>      def local(test)
Z>      {
Z>          test.TestEvent += (_, _) => (); // fail
Z>      }
      
Z>      local(test)
Z>  }
Z>}
Z>


Поглядел под отладчиком... Баг. Очередная проблема в расхождении логики отложенной типизации и прямой. Постараюсь устранить в ближайшее время.

Воркэраунт: Указать тип у парамера:
      def local(test : TestClass)
      {
          test.TestEvent += (_, _) => (); // fail
      }
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Подписка на события внутри локальных методов. Баг или фи
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.10 19:25
Оценка: 21 (3)
Здравствуйте, Ziaw, Вы писали:

Z>
Z>      def s(item, action)
Z>      {
Z>        //   vvv Error: needed writable value, got [event 'System.Windows.Forms.ToolStripItem.Click']
Z>        item.Click += fun(_, _) { action() } 
Z>      }
      
Z>      s(openToolStripButton, openFile);
      
Z>      openToolStripButton.Click += fun(_, _) { openFile() } // ok
Z>


Исправил.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.