Hello all,

I am looking for Ruby equivalent for this Python Code

 >>> def foo(a,b,c):
....     print "a is ", a
....     print "b is ", b
....     print "c is ", c
....
 >>> h = {"c":3, "a":1, "b":2}
 >>>
 >>> foo
<function foo at 0x403d6f7c>
 >>> foo(**h)
a is  1
b is  2
c is  3

my first try

=> {"c"=>333, :b=>2, :a=>1}
irb(main):017:0> def foo a,b,c
irb(main):018:1> puts "a is #{a}"
irb(main):019:1> puts "b is #{b}"
irb(main):020:1> puts "c is #{c}"
irb(main):021:1> end
=> nil
irb(main):022:0> foo *h
a is c333
b is b2
c is a1
=> nil


this seem to replace (or substituate) the parameters expected by foo
in the order of hash. And since hash has no order (in both languages) 
it's a random replacement.

Is there a trick I don't know about?

Regards, Daniel


ps:

The case of unpacking an array seem to be 1:1 mapping betweeen Python 
and Ruby.

 >>> n = [1,2,3]
 >>>
 >>> def bar(*args):
....     for i in args:
....             print i
....
 >>> bar(*n)
1
2
3
 >>>
 >>> bar(1,2,3)
1
2
3
 >>>


irb(main):065:0> def bar *args
irb(main):066:1> args.each {|i| puts i}
irb(main):067:1> end
=> nil
irb(main):068:0> n = [1,2,3]
=> [1, 2, 3]
irb(main):069:0> bar(*n)
1
2
3
=> [1, 2, 3]
irb(main):070:0> bar(1,2,3)
1
2
3
=> [1, 2, 3]
irb(main):071:0>