From: Glenn Date: 2008-06-12T04:21:35+09:00 Subject: Keyword parameters --0-1272390464-1213211707=:24047 Content-Type: text/plain; charset=us-ascii Hi everyone, I have a question about keyword parameters in Ruby. I know that v1.8.6 doesn't do this and v1.9 does, and that you can 'trick' v1.8.6 into doing it with hashes. My question is whether you can do this code: def aProc(options = {}) a = options[:a] || 5 b = options[:b] || 6 c = options[:c] || 7 print a, b, c end in such a way where you wouldn't have to explicitly say that the local variable a is equal to the value in the hash with symbol :a? In other words, to do something like iterate through the hash and turn all of the symbol keys into local variable with their respective values? Thanks, Glenn ----- Original Message ---- From: Jason Roelofs To: ruby-talk ML Sent: Monday, March 3, 2008 4:36:49 PM Subject: Re: Why is this not implemented in Ruby Show me a language that does allow you to do this, I've never seen it. Even then, Ruby doesn't deal with method overloads via parameter lists, so there's a fundamental reason why it won't work: def foo(a) end def foo(a, b) end def foo(a, b, c) end foo(1) # => ArgumentError: wrong number of arguments (1 for 3) Ruby 1.9 has keyword arguments, so you'll be able to get past that easily then. You can fake it in 1.8 with a hash: def aProc(options = {}) a = options[:a] || 5 b = options[:b] || 6 c = options[:c] || 7 print a, b, c end aProc(:a => 1, :c => 3) With Ruby 1.9 that will look like (I think, doing this from memory): aProc(a: 1, c: 3) Jason On Mon, Mar 3, 2008 at 4:27 PM, Damjan Rems wrote: > > It is probably a good reason but why is this not implemented in ruby. > > irb(main):005:0> def aProc(a=5,b=6,c=7) > irb(main):006:1> print a,b,c > irb(main):007:1> end > irb(main):008:0> aProc > 567=> nil > > irb(main):009:0> aProc(1,,3) > SyntaxError: compile error > (irb):9: syntax error, unexpected ',' > aProc(1,,3) > ^ > from (irb):9 > from :0 > > Why oh why I can not omit parameter in the middle of statement? I am > forced to know its default value if I want to omit a parameter in the > middle or at the begining of the statement. > > > by > TheR > -- > Posted via http://www.ruby-forum.com/. > > --0-1272390464-1213211707=:24047--