From: Aldric Giacomoni Date: 2009-10-28T12:24:39+09:00 Subject: Closures / lambda question This is something I don't understand, and did not understand when I studied LISP. I just watched Dave Thomas' presentation, "Extending Ruby for Fun and Profit", which I by the way highly recommend to everyone who hasn't seen it... And he has the following example: def proc_with_enclosing_scope name = "Ruby" lambda { puts name } end the_proc = proc_with_enclosing_scope the_proc.call name = "Java" the_proc.call _____ I don't understand what Ruby is doing / what happens. First question: the "name" variable is defined inside the method proc_with_enclosing_scope, so why would changing the name outside the method make a difference in the first place? Second question: I tried to type this straight into irb and made a small typo, so it came out as such - >> def proc_with_enclosing_scope >> name = "Ruby" >> lamda { puts name } >> end => nil >> the_proc = proc_with_enclosing_scope NoMethodError: undefined method `lamda' for main:Object from (irb):23:in `proc_with_enclosing_scope' from (irb):25 So.... When the_proc gets assigned the ... Value of the method running... (?) What does it get assigned? And lastly.. I know that "proc" exists, too. What is the difference / what does it do? I thank you very much in advance for the enlightenment you will provide :) -- Posted via http://www.ruby-forum.com/.