История изменений
Исправление
geekless,
(текущая версия)
:
Получается, что на самом деле никто никакую новую функцию не возвращает, а просто производятся всякие операции с указателями на куски заранее существующего кода?
В Ruby все объекты унаследованы от Object. В том числе и функции (Proc). Любой обьект является по сути хитрым словарём, содержащим указатели на методы, переменные и т.п. Которые сами являются объектами.
Или вот еще пример из Io:
errorHandler := method(error, x,
method(
loop(
result := x()
(result != error) ifTrue (return(result))
)
)
)
usb_bulk_read_again := method(a, b, c, d, e, errorHandler(EAGAIN, usb_bulk_read(a, b, c, d, e)))
usb_bulk_read_again(dev, ep, buf, size, 1000)
Суть та же. Однако в отличие от Ruby, где понятие «код метода» выходит за пределы языка, в Io код любого метода подаётся полной интроинспекции. Т.е., натурально, список (errorHandler(EAGAIN, usb_bulk_read(a, b, c, d, e))) является кодом, и в то же время — обычным списковым типом языка.
Исходная версия
geekless,
:
Получается, что на самом деле никто никакую новую функцию не возвращает, а просто производятся всякие операции с указателями на куски заранее существующего кода?
В Ruby все объекты унаследованы от Object. В том числе и функции (Proc). Любой обьект является по сути хитрым словарём, содержащим указатели на методы, переменные и т.п. Которые сами являются объектами.
Или вот еще пример из Io:
errorHandler := method(error, x,
method(
loop(
result := x()
(result != error) ifTrue (return(result))
)
)
)
usb_bulk_read_again := method(a, b, c, d, e, errorHandler(a, b, c, d, e, usb_bulk_read(a, b, c, d, e)))
usb_bulk_read_again(dev, ep, buf, size, 1000)
Суть та же. Однако в отличие от Ruby, где понятие «код метода» выходит за пределы языка, в Io код любого метода подаётся полной интроинспекции. Т.е., натурально, список (errorHandler(a, b, c, d, e, usb_bulk_read(a, b, c, d, e))) является кодом, и в то же время — обычным списковым типом языка.