前田です。

以前何度かPascalのwithのようなものが欲しいという要望が
ありましたが、

static VALUE
f_with(recv, obj)
    VALUE recv, obj;
{
    /* 引数のオブジェクトをselfにする
       イテレータ変数にはレシーバ(元のself)を渡す */
    return rb_yield_0(recv, obj);
}

...

    rb_define_global_function("with", f_with, 1);

という関数を用意してはどうでしょう。

  with obj do
    ...
  end

Tkみたいにselfを切り換えるだけなのでPascalのwithとはちょっと
違いますけど...。

-- 
前田 修吾