1.8では,define_methodでブロックを受け取るメソッドは定義できない?

define_method(:foo) {|*args, &block|
  #何か処理
}

と書きたいんだけど,syntax errorになってしまう.define_methodではブロックを受け取るメソッドは定義できないのかなぁ.

define_method(:foo) {|*args|
  block = proc rescue nil
  #何か処理
}

これでできるかと思ったけど,define_methodを呼んでいるメソッドのコンテキスト(?)でprocするのでエラー.ブロック内でyieldできないのと同じか.


話変わるけど,:@aryのところでEmacsの色付けがおかしい(インスタンス変数と間違う).他にも,#@aとか#{}とか書いてあると,ダブルクォート内でなくても式展開と間違う(コメント文の色がおかしくなって困る).=beginって書くと一度文字列リテラルの色になる(=endを書いてから暫くするとコメントの色になる).インデントしてあるところで=begin〜=endを書くとインデントがおかしくなる(複数行コメントアウトとして使うのが間違い?).あと%記法に対応してない気がする.
Rubyの色付けや自動インデントは難しいと思うけど,色付けが間違ってる所はそんなに難しくない所が多い気がした.単に漏れてるだけなのかな?実際にはどうなんだろう.
とりあえず,俺には荷が重そうだ.誰かなんとかしてくれないかなぁ.


はてなの色付けの方が頑張ってる気がしたのでテスト.

#@foo
"foo#{bar}foo#@baz foo#$baz"
'foo#{bar}foo#@baz foo#$baz'
["foo", "bar", "baz"]
%w[foo bar baz]

頑張ってるなぁ.