[D] вложенные классы
От: x-code  
Дата: 13.01.08 20:21
Оценка:
Сравнивал замыкания в D, Scala и Nemerle, и решил проверить как они работают с вложенными классами. Наткнулся на проблему в Ди, которая к замываниям в общем не имеет отношения.
Итак, почему такой вот код на Ди компилируется без ошибок?
int delegate() func(int x)
{
    int local = x;  // local variable
    class Inner
    {
        int foo()
        {
            return local;
        }
    }
    return &Inner.foo;  //  return inner non-static function
}

int main(char[][] args)
{
  int delegate() df;
  df = func(100);
  int res = df();
  return 0;
}

Программа естественно вылетает, и понятно почему — возвращаемая функция не имеет объекта класса (который не создавался). Но почему тогда компилятор позволяет возвратить нестатическую функцию без объекта?

В Scala подобный код не проходит (в то же время, если я создам объект и верну функцию от объекта, то все работает правильно как в D так и в Scala), в Nemerle не знаю т.к. на домашнем компе нет рабочей версии компилятора.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.