Disappointed for the first time

Apr 25, 2017

I’ve been playing with Ruby a bit in the last year.
One thing that is never shown in the documentation,
and perhaps is never considered useful style, is
assignment of a block to a variable.
It turns out you can pass a block as an argument to methods that
expect one, but can’t use the { |vars| actions } literal syntax,
nor the do .. end syntax to define what feels like a lambda
from the block.

I was blissfully unaware of this limitation until reading the pickaxe book
I came across the sentence:

“All you can do with a block is associate it with a call to a method.”

I immediately opened an irb session and tried to assign to aBlock.
Errors popped up everywhere. It seems like a context sensitive assignment
is happening in the parser when a curly brace is seen in a block context (start
a block) and another one is happening when a curly brace is seen outside (start a
hash/map/dictionary).

Well, I sure don’t like magic syntax that’s constrained. Blocks are still immensely more comfortable than lambda’s in python, but not fully capable, like blocks in Smalltalk, or lambdas in lisp.