Передача extension method в качестве значения
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.09.09 11:48
Оценка:
Почему-то не компилируется такой код:
module Program
{
  Main() : void
  {
    def s = "";
    Foo(s.Extension)
  }
  
  Foo(_ : string -> void) : void { }
  
  public Extension(this _x : string, _y : string) : void { }
  
}


В то же время аналогичный код на C# компилируется и работает:
using System;

static class Program
{
  static void Main()
  {
    var s = "";
    Foo(s.Extension);
  }
  
  static void Foo(Action<string> _) { }
  
  public static void Extension(this string _x, string _y) { }
}
Re: Передача extension method в качестве значения
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.09.09 12:44
Оценка:
Здравствуйте, nikov, Вы писали:

N>Почему-то не компилируется такой код:

Они вообще своеобразно реализованы.

Но если надо можно пользоваться частичным применением:
    def s = "";
    Foo(Extension(s, _))


Общем, недоработка. Буду признателен если ты добавишь фича-реквест в багтеркер. Задача не приоритетная, но сделать надо.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Передача extension method в качестве значения
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.09.09 12:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Общем, недоработка. Буду признателен если ты добавишь фича-реквест в багтеркер. Задача не приоритетная, но сделать надо.


А багтрекер по-прежнему на http://nemerle.org/bugs или тоже переехал куда-то?
Re[2]: Передача extension method в качестве значения
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.09.09 13:02
Оценка:
Здравствуйте, VladD2, Вы писали:

Кстати, то что на 64-битной Vista не работает подсветка, интеллисенс и нельзя добавлять референсы — это известная проблема?
Re[3]: Передача extension method в качестве значения
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.09.09 13:27
Оценка:
Здравствуйте, nikov, Вы писали:

N>А багтрекер по-прежнему на http://nemerle.org/bugs или тоже переехал куда-то?


Да.

Мы думаем над его переносом на гуглькод, но пока он прежний.
Ну, и естественно, что при переносе мы сохраним записи.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Передача extension method в качестве значения
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.09.09 13:29
Оценка:
Здравствуйте, nikov, Вы писали:

N>Кстати, то что на 64-битной Vista не работает подсветка, интеллисенс и нельзя добавлять референсы — это известная проблема?


Я работаю под 32-битной Vistа-ой и 64-битной Windows 7. Везде все работает нормально.

Ты что использовал?
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Передача extension method в качестве значения
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.09.09 13:33
Оценка:
Здравствуйте, VladD2, Вы писали:

N>>Кстати, то что на 64-битной Vista не работает подсветка, интеллисенс и нельзя добавлять референсы — это известная проблема?


VD>Я работаю под 32-битной Vistа-ой и 64-битной Windows 7. Везде все работает нормально.


VD>Ты что использовал?


Я поставил билд, который указан на заглавной странице http://nemerle.org : NemerleSetup-2008Mar-7912.msi
Re[5]: Передача extension method в качестве значения
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.09.09 14:00
Оценка:
Здравствуйте, nikov, Вы писали:

N>Я поставил билд, который указан на заглавной странице http://nemerle.org : NemerleSetup-2008Mar-7912.msi


А, да. Там была проблема.
Надо сделать хардлинк c "%ProgramFiles(x86)%\Nemerle" на "%ProgramW6432%\Nemerle".
Сделать его можно, например, с помощью junction.exe из SysInternals.
Код можно взять из Reg.cmd.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Передача extension method в качестве значения
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.09.09 21:27
Оценка: 34 (2)
Здравствуйте, nikov, Вы писали:

N>Почему-то не компилируется такой код:

N>
N>module Program
N>{
N>  Main() : void
N>  {
N>    def s = "";
N>    Foo(s.Extension)
N>  }
  
N>  Foo(_ : string -> void) : void { }
  
N>  public Extension(this _x : string, _y : string) : void { }
  
N>}
N>


Исправил в ревизии 8346:
http://code.google.com/p/nemerle/source/detail?r=8346
Примеры:
using System.Console;

module Program
{
  Main() : void
  {
    def s = "a";
    Foo(s.Extension);
    def f = "c".Extension;
    f();
  }
  
  Foo(f : string -> void) : void
  {
    f("b")
  }
  
  public Extension(this x : string) : void
  {
    WriteLine($"x=$x");
  }
  public Extension(this x : string, y : string) : void
  {
    WriteLine($"x=$x y=$y");
  }
}
/*
BEGIN-OUTPUT
x=a y=b
x=c
END-OUTPUT
*/
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.