Макроатрибуты в локальных функциях
От: _nn_ www.nemerleweb.com
Дата: 24.10.11 08:17
Оценка:
def f([AnythingGoes] _x) 
{
 1 
};


Код успешно компилируется, хотя макроатрибут не указан.
Проверяется только при попытке использовать его в методах:

F([AnythingGoes] _x : object) : int // Ошибка компиляции, не найден AnythingGoesAttribute
{
 1 
};


Также макроатрибут полностью игнорируется даже если он находится:
using Nemerle.Assertions;

def f([NotNull] _x) 
{
 1 
};

f(null); // Нет ошибки !


Тут нужно либо запретить макроатрибуты в локальных функциях, либо их починить.
Какие мнения ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Макроатрибуты в локальных функциях
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.10.11 08:20
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Тут нужно либо запретить макроатрибуты в локальных функциях, либо их починить.

__>Какие мнения ?

Конечно чинить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Макроатрибуты в локальных функциях
От: _nn_ www.nemerleweb.com
Дата: 24.10.11 08:26
Оценка:
Здравствуйте, VladD2, Вы писали:

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


__>>Тут нужно либо запретить макроатрибуты в локальных функциях, либо их починить.

__>>Какие мнения ?

VD>Конечно чинить.


Кстит, аналогичная проблема с простыми атрибутами:
using System;

class MyAttribute : Attribute {}

module M
{
 Main() : void
 {
  def f([My] x) { x }

  Console.WriteLine(f(1));
 }
}


`MyAttribute' is not externally visible and has never been referenced


Не говоря о том, что нельзя применить атрибут непосредственно к функции:
(Если чинить, то чинить до конца )
  [My]
  [return: My]
  def f(x) { x }
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.