In article <1130222755.861386.32126.nullmailer / x31.priv.netlab.jp>, Yukihiro Matsumoto <matz / ruby-lang.org> writes: > |def foo(*args, **keys, &block) > | bar(*args, **keys, &block) > |end > | > |What's wrong with having to do that? > > It's longer than it is really needed. I want to delegate everything > I've passed, that's all. I'd rather delegate blocks as well when I > write bar(*args). I think an array, *args, is a structure too poor to represent the all arguments. How about **keys contains positional arguments and block? A hash is enough rich to represent positional argument and block addition to keyword arguments. def foo(**keys) p keys bar(**keys) end foo(1, 2, k:3) {} => {:k => 3, "positional" => [1, 2], "block" => lambda {}} This means keys contains special pairs for positional arguments and block. In this example, "positional" and "block" is used because strings are disjoint from symbols as hash keys. -- Tanaka Akira