Комментарии 8
не хватает отличий между Proc и lambda(а это очень важно!) но в целом плюсик
0
Может, таки перенести цикл в блог Ruby?
0
Спасибо! Только вот здесь
лучше пару имён поправить (первую
например a = lambda {|a,b,c| a+b+c } создаст блок, который складывает три числа, в частности выражение b[1,2,3] вернет 6;
лучше пару имён поправить (первую
a
и последнюю b
на что-то другое)+2
НЛО прилетело и опубликовало эту надпись здесь
Да, есть такая возможность. Код
выведет
Термин «переменные родителя» мне непонятен. Переменные объекта не знают к какому из классов в иерархии наследования они относятся. И никто не знает. То же самое касается переменных класса.
class A; def a; puts "A#a"; end; end class B < A; def a; puts "B#a"; lambda { super }; end; end B.new.a.call
выведет
B#a A#a
Термин «переменные родителя» мне непонятен. Переменные объекта не знают к какому из классов в иерархии наследования они относятся. И никто не знает. То же самое касается переменных класса.
0
НЛО прилетело и опубликовало эту надпись здесь
Что-то не очень нравитсяопределение в википедии.
Я бы написал
Замыкание — это функция, которая создается во время работы программы. Из тела этой функции доступны все переменные и функции, которые дотсупны в контексте, в котором создано замыкание. Для корректной работы замыканий необходимо, чтобы при жизни замыкания жили и локальные переменные, доступные из нее. В идеале в теле замыкания должна быть возможность делать всё, что можно делать в контексте, в котором оно было создано.
Я бы написал
Замыкание — это функция, которая создается во время работы программы. Из тела этой функции доступны все переменные и функции, которые дотсупны в контексте, в котором создано замыкание. Для корректной работы замыканий необходимо, чтобы при жизни замыкания жили и локальные переменные, доступные из нее. В идеале в теле замыкания должна быть возможность делать всё, что можно делать в контексте, в котором оно было создано.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
3. Metaprogramming patterns — 20 кю. Замыкания