Try this:

myblock = Proc.new { |foo|
  #do something to foo
}

myblock.call foovalue

myblock is now a first class object bound to the block. There is one small wierdness with how that works but you'll find that out later.

-- Jason Clinton

Actually, I'm aware of that. The point is that blocks other than the code block passed to method have to be treated with a syntax different that that used for the code black. For example you can't yield on them, and (AFAICT) you have to use a particular syntax when you want to cast them back to be passed as the code block for a method.

Anyhow you have a point: blocks are indeed first class value, I'm just not happy about the syntactic distinction amont the default code block for a method and the other code blocks.

-- Zack