В статье
Язык Nemerle Часть 3Автор(ы): Чистяков Владислав Юрьевич
Дата: 25.07.2010
Неформальное введение в язык программирования Nemerle. В этой части, на базе примера «калькулятор», описываются типы данных variant и class.
читаем:
Обратите внимание на то, что в образце «переменная» может использоваться любое имя, начинающееся с маленькой буквы или подчеркивания (большую букву в образцах компилятор Nemerle рассматривает как имя типа).
Из этого следует, что Немерль имеет регистрозависимую семантику. Эта регистрозависимая семантика ложится на регистронезависимую семантику НЕТа. Естественно, эта несогласованность где-то должна вылезти.
Идентификатор с маленькой буквы в ПМ считается связанной переменной. Давайте сделаем вариант с маленькой буквы и попробуем его скормить ПМ.
public variant V1
{
| field1
| field2
}
Опа! Немерль не пропускает и выдает нам ошибку:
variant options' names must start with capital letter
Интересно, эта фича известна в широких кругах немерлистов?
Итак, с вариантами фокус не прошел. А как с перичислениями? Заметьте, что вводить для перечислений внутренние правила Немерля бессмысленно, так как перечисление может быть импортировано. А там оно подчиняется правилам НЕТа, согласно которым исполнение программы не зависит от регистра букв идентификатора.
namespace Test1
{
using MBox = System.Windows.Forms.MessageBox;
public enum E1
{
| field1
| field2
}
public module Lang
{
public Test(e: E1): string
{
| field1 => "field1"
| field2 => "field2"
}
Main(): void
{
_ = MBox.Show(Test(E1.field1));
_ = MBox.Show(Test(E1.field2));
}
}
}
Результатом исполнения программы будет вывод два раза "field1". Это говорит о том, что идентификатор field1 в ПМ понимается Немерлем как связанная переменная.
А теперь меняем буковку f на большую F:
namespace Test1
{
using MBox = System.Windows.Forms.MessageBox;
public enum E1
{
| Field1
| Field2
}
public module Lang
{
public Test(e: E1): string
{
| Field1 => "Field1"
| Field2 => "Field2"
}
Main(): void
{
_ = MBox.Show(Test(E1.Field1));
_ = MBox.Show(Test(E1.Field2));
}
}
}
Получается вывод "Field1", "Field2". Теперь Немерль понимет Field1 как элемент перечисления.
Вот такие дела.