原です。

>以下のように一行でも書けます。長ったらしいので見た目は良くありませんが(^^;)。
>
>[1, 2, 3].extend(IntArrayExt).gcd

なかなかいいと思いますが、やっぱり見た目がなあ:-)


標準的にclass_function(仮称)をサポートすると、多少気持ちが
楽になるかも。

  class Object
    def define_singleton_method(m, &b)
      (class<<self;self;end).instance_eval{define_method(m, &b)}
    end
  end
  
  class Module
    def class_function(meth)
      define_singleton_method(meth){|x, *a| x.send(meth, *a)}
    end
  end
  
  #TEST
  class Foo
    attr_reader :x
    def initialize(x); @x = x; end
  
    def sum(*a)
      Foo.new(a.inject(@x){|s, r| s + r.x})
    end
  
    class_function :sum
  end
  
  a, b, c = Foo.new(1), Foo.new(2), Foo.new(3)
  p a.sum(b, c)
  p Foo.sum(a, b, c)


#define_singleton_methodって無いんですね、、、