江渡です。

> でも、そうじゃないということは、この拡張モジュールの作りが少し
> 「行儀が悪い」のかもしれません。

そうかもしれません。このモジュールはバイナリーでしか提供されていないので、
深入りして調べるのはやめておきます。

> どうしてもPythonのListが欲しい場合は、Pythonの関数list()を使えば
> 作れます。こんな感じ。
> 
> require 'python'
> p Py.list([1,2,3]).type  # => Py::Types::ListType

Py.listを使う方法はうまくいきました。

そこでmethod_missingの前にもう一つ皮をかぶせて、引数がRuby listだったら
Python listに変換させるようにすればいいだろうと思い実験してみました。

#!/usr/bin/env ruby
require 'python'
require 'python/lightflowPM'
include Py::LightflowPM
s = scene()

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

s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 4.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )
exit 0

というスクリプトを書いてみたのですが、うまくいきませんでした。
(無茶苦茶下手なスクリプトですいません。)

% ./ball1k.rb

Lightflow Rendering Tools
Copyright (c) 1995-2000 by Jacopo Pantaleoni. All rights reserved

./ball1k.rb:16: [BUG] no method id
Abort
%

もうちょっと実験してみます。

江渡 浩一郎 Kouichirou / Eto.com