Steven Taylor wrote:

> Coming from other programming languages, notably Basic based, a little
> Java & C++, I find that passing blocks into methods is a little cryptic.
> What I mean is that when reading a method description (definition) there
> is no reference made to the fact that a block could be passed in as an
> argument. To me, it appears as if the method has to be read in
> conjunction with how the method is actually called in order to know if a
> block is passed or not. If my assertion is correct then the actual
> method call(s) in source code could be 100's of lines away from the
> method definition.

This is the shortcut:

   def method(args)
     yield
   end

The longcut lets you treat the block as an object:

   def method(args, &block)
     block.call
   end

Use the shortcut if your method is very close to its call site, and if you have 
any reason to upgrade to the longcut, then upgrade and don't look back.

Blocks are mondo-important, and those other (corporate!) languages should be 
ashamed they don't have them yet...

> Is this how things are or are there some techniques to smooth this
> process somewhat?

Write lots of unit tests.