Louis-Philippe wrote:
> I'm not sure I'll use it though, as it require you define the function
> inside a string...
> a bit cumbersome.

How about using %{ ... } for the string? Then it looks more like a 
normal lambda.

a = fn %{ |x| puts x+x }
a["Hello"]
puts a.source

Or you can read the source from its own file, or for longer snippets you 
can use a here-doc.

a = fn <<'EOF'
{ |x| puts x }
EOF

> what I need is some sort of macro system (the LISP macro, not the C one),
> to parse the block before calling it.  I was thinking to make it a string,
> then parsing with regex, would have done it...

Ruby doesn't have macros. If you write a block in the usual way, the 
Ruby interpreter will turn it into a Block object, and you cannot get 
its source form back (in MRI anyway)

If you are only interested in simple regexp source transformations, then 
you should start from a string form as above, transform, then eval.

For more complex transformations, still starting with a string, you 
might be able to use one of the ruby-in-ruby implementations (e.g. 
rubinius) or ParseTree to parse and transform it, I'm not sure.
-- 
Posted via http://www.ruby-forum.com/.