По мотивам - http://programmingmindstream.blogspot.ru/2014/01/embarcadero-procedure-reference-to.html?showComment=1390425848776#c4250509825918387115
У меня вот так примерно можно сделать:
А вот если сделать так:
А вот если сделать так:
Но "НЕОЧЕВИДНОСТИ" - вполне объяснимы.
P.S. А если сделать так:
- потому что "переменные" (как и все остальные "слова словаря") это тоже - "объекты". С подсчётом ссылок.
И всеми остальными "вытекающими" последствиями...
У меня вот так примерно можно сделать:
FUNCTOR FUNCTION A INTEGER IN anX Result := ( 1 + anX ) // возвращаем "лямбду" ; // A PROCEDURE B INTEGER VAR l_Y := 10 // - Объявляем целочисленную переменную и присваиваем ей 10 FUNCTOR VAR l_Functor := A ( l_Y ); // - вызываем функцию A и передаём ей переменную l_Y // и получаем "лямбду" в l_Functor INTEGER VAR l_Z := l_Functor DO // - вызываем "лямбду", сохранённую в l_Functor и получаем значение в l_Z. // l_Z теперь РАВНО 11 ; // B
А вот если сделать так:
PROCEDURE B INTEGER VAR l_Y := 10 // - Объявляем целочисленную переменную и присваиваем ей 10 FUNCTOR VAR l_Functor := A ( l_Y ); // - вызываем функцию A и передаём ей переменную l_Y // и получаем "лямбду" в l_Functor l_Y := 20 INTEGER VAR l_Z := l_Functor DO // - вызываем "лямбду", сохранённую в l_Functor и получаем значение в l_Z. // l_Z теперь РАВНО 11, а не 21. Что - НЕОЧЕВИДНО ; // B
А вот если сделать так:
FUNCTOR FUNCTION A POINTER INTEGER IN anX Result := ( 1 + anX ) // возвращаем "лямбду" ; // A PROCEDURE B INTEGER VAR l_Y := 10 // - Объявляем целочисленную переменную и присваиваем ей 10 FUNCTOR VAR l_Functor := A ( l_Y ); // - вызываем функцию A и передаём ей переменную l_Y // и получаем "лямбду" в l_Functor l_Y := 20 INTEGER VAR l_Z := l_Functor DO // - вызываем "лямбду", сохранённую в l_Functor и получаем значение в l_Z. // l_Z теперь РАВНО 21, а не 11. Что - ТОЖЕ НЕОЧЕВИДНО ; // B
Но "НЕОЧЕВИДНОСТИ" - вполне объяснимы.
P.S. А если сделать так:
FUNCTOR FUNCTION A POINTER INTEGER IN anX Result := ( 1 + anX ) // возвращаем "лямбду" ; // A FUNCTOR FUNCTION B INTEGER VAR l_Y := 10 // - Объявляем целочисленную переменную и присваиваем ей 10 Result := A ( l_Y ); // - вызываем функцию A и передаём ей переменную l_Y // и получаем "лямбду" в l_Functor l_Y := 20 ; // B PROCEDURE C FUNCTOR VAR l_Functor := B INTEGER VAR l_Z := l_Functor DO // l_Z - опять же равен 21. Что ОПЯТЬ ЖЕ - НЕОЧЕВИДНО ;
- потому что "переменные" (как и все остальные "слова словаря") это тоже - "объекты". С подсчётом ссылок.
И всеми остальными "вытекающими" последствиями...
Прекрасный мир...
ОтветитьУдалитьЭэ... это какие из 26 измерений?
"это какие из 26 измерений?"
Удалить-- 27-е... :-)
А вот начну описывать то как мета-модель сама выводится из мета-модели - там будет УЖЕ 35-е... :-)