福嶋です。

matz / netlab.co.jp (Yukihiro Matsumoto) wrote:
  Subject: [ruby-dev:10108] Re: method_missing & super (Re: [ruby-ext:01125] Re: Lightflow with Rub/Python)
> まつもと ゆきひろです
> |rubyのバグのような気もするので、ruby-devに振ります。
> おっしゃる通りバグです。もう直しましたので、明日のチェックイ
> ンで直ります。1.4.5に間に合いましたね。

というわけで、ruby-1.4.5を使うと解決するはずです。


"Kouichirou Eto" <Kouichirou / Eto.com> wrote:
> def s.method_missing(id, *args, &block)
>   nargs = []
>   args.each {|a|
>     if a.type == Array
>       nargs += Py.list(a)
>     else
>       nargs += a
>     end
>   }
>   super(id, *args, &block)
> end

あと、このメソッドですが、以下のようにした方が少し効率が良いと思
います。

def s.method_missing(id, *args, &block)
  args.filter {|a|
    case a
    when Array
      Py.list(a)
    else
      a
    end
  }
  super(id, *args, &block)
end

いずれにせよ、こういう変換の必要性は、このケースに限らずあるかも
しれないので、Ruby/Pythonにそのためのフックを用意した方が良いかも。

---
福嶋正機