Maybe you are looking for something like that? > p = lambda {|num| puts num } > p.call(123) 123 > --- Ursprgliche Nachricht --- > Von: ajmayo / my-deja.com > An: ruby-talk / ruby-lang.org (ruby-talk ML) > Betreff: Assigning a block to a variable in Ruby > Datum: Fri, 16 Dec 2005 01:57:41 +0900 > > I am new to Ruby and curious as to how you emulate the following > Javascript snippet > (example in Windows, hence the call to Echo) > > var a = function(p) {WScript.Echo(p)} > > bar(a); > > function bar(z) > { > z(1); > WScript.Echo(z); > } > > which would of course create an anonymous function, assign it to > variable a, pass this as a parameter to function bar() and then > evaluate the function with parameter 1, then attempt to print the > function itself (which Javascript will do, printing the text of the > block) > > I found Ruby quite intuitive until I tried > > a = {some block} > > and found that this of course doesn't work as in this context {} refers > to a hash. > > Ok, that's fine, but the 'yield' statement seems very funky and Perlish > to me. Effectively a block passed to a routine exists as a 'hidden' > argument so that > > foo(100) {someblock} > > in Ruby passes one parameter explicitly (as we would see from foo's > defined argument list) and a 'hidden' block which 'yield' inside the > body of foo() would evaluate. > > (though, oddly, yield {someblock} is also not valid Ruby). > > This seems horribly inelegant for a language touted as being The Next > Great Thing. > > It is also unclear, how, then, I pass down a block as an argument and > then in turn pass it again to a child routine. > > I can see how a parameter to a block works - this is clearly borrowed > >from Smalltalk - but Javascript doesn't enforce separation of dynamic > code in the way Ruby appears to. > > At present Javascript's syntax looks much cleaner. Am I missing > something? > > Also, I presume Ruby is a forward-referencing language only, unlike > Javascript, where I can declare a function after code which calls it. > Ruby didn't seem to like that much. > >