enum Options
{
| Default
| Magic
}
SomeMethod(parameter : object, opts : Options = Options.Default) : void // ошибка
{
// blah blah blah
}
Для параметра opts нельзя указать значение Options.Default, потому что Nemerle не считает Options.Default литералом. Нуль указать тоже нельзя, потому что int и Options неявно неприводимы.
Как бороться?
Здравствуйте, catbert, Вы писали:
C>C>enum Options
C>{
C> | Default
C> | Magic
C>}
C>SomeMethod(parameter : object, opts : Options = Options.Default) : void // ошибка
C>{
C> // blah blah blah
C>}
C>
C>Для параметра opts нельзя указать значение Options.Default, потому что Nemerle не считает Options.Default литералом. Нуль указать тоже нельзя, потому что int и Options неявно неприводимы.
Компилятор так себя ведет если перечисление находится в компилируемой сборке. Для перечислений из внешних сборок все замечательно. Предлагаю отписать это в багтрек.
Здравствуйте, hardcase, Вы писали:
H>Компилятор так себя ведет если перечисление находится в компилируемой сборке. Для перечислений из внешних сборок все замечательно. Предлагаю отписать это в багтрек.
Вот и выросло поколение...
Nemerle compiler использует стандартный System.Reflection.Emit для создания сборок. А в нём полно косяков.
В данном случае проблема в том, что EnumBuilder ущербнен от рождения. Вот пара ссылок:
https://connect.microsoft.com/VisualStudio/feedback/details/98253/system-reflection-emit-eventbuilder-should-inherit-from-system-reflcetion-eventinfo
http://blogs.msdn.com/b/yirutang/archive/2005/05/19/420134.aspx
Забороть это можно только переходом с SRE на что-то другое.