東芝の田中です。

On Wed, 24 Sep 1997, 石塚圭樹 wrote:

> String#scanの仕様が, 全然マッチしなかった時は, nilを返して, マッチした
> が, ``()''がない場合は, 空の配列を返す仕様になっていると良いと思うんで
> すが... >> matz

まつもとさんも書かれていますが、こういう仕様にはすでになっていると思います。
だからempty? で判断せずにnilかどうかで判断すればいいのだと思います。

	if match = str.scan(assoc[0])
		assoc[1].call match

という感じで大丈夫ではないんでしょうか?
正規表現内に()がないときには、空の配列が渡ります。