Methods optional arguments

Hi there:

I was learning about methods, and when I was trying to use optional
arguments I get stucked with this:

def my_method (a='This', b='is', c='great')
  puts a+' '+b+' '+c
end

If I try:
  my_method('Ruby')
  -> Ruby is great
  -> nil

But if I try:
  my_method(,'cool')
  -> SyntaxError: compile error

Any idea on how to use arguments different from the first one?.

Thank's in advance, Ibon.

···

--
Posted via http://www.ruby-forum.com/.

Optional arguments must be passed in the order they're declared, and
cannot be omitted. Instead, you'll often see hashes used instead.

def my_method(options={})
  o = {
    :a => 'This',
    :b => 'is',
    :c => 'cool'
  }.merge(options)

  puts "#{o[:a]} #{o[:b]} #{o[:c]}"
end

my_method( :c => 'great' )

···

On Mon, Jun 29, 2009 at 8:20 AM, Ibon Castilla<ibon.castilla@gmail.com> wrote:

Hi there:

I was learning about methods, and when I was trying to use optional
arguments I get stucked with this:

def my_method (a='This', b='is', c='great')
puts a+' '+b+' '+c
end

If I try:
my_method('Ruby')
-> Ruby is great
-> nil

But if I try:
my_method(,'cool')
-> SyntaxError: compile error

Any idea on how to use arguments different from the first one?.

Thank's in advance, Ibon.
--
Posted via http://www.ruby-forum.com/\.

Michael Morin wrote:

�my_method('Ruby')
--
Posted via http://www.ruby-forum.com/\.

Optional arguments must be passed in the order they're declared, and
cannot be omitted. Instead, you'll often see hashes used instead.

def my_method(options={})
  o = {
    :a => 'This',
    :b => 'is',
    :c => 'cool'
  }.merge(options)

  puts "#{o[:a]} #{o[:b]} #{o[:c]}"
end

my_method( :c => 'great' )

I agree that's probably the best approach in most cases. If you really
want 'optional' earlier arguments, you'd have to do something like this:

def my_method(a=nil, b=nil, c=nil)
  a ||= 'This'
  b ||= 'is'
  c ||= 'great'
  puts a+' '+b+' '+c
end

p my_method(nil, nil, 'cool')

···

On Mon, Jun 29, 2009 at 8:20 AM, Ibon Castilla<ibon.castilla@gmail.com> > wrote:

--
Posted via http://www.ruby-forum.com/\.

Hi both:

Thanks for the code. I'll print it out to keep it safe, and not to hold
on my memory :wink:

Cheers, Ibon.

···

--
Posted via http://www.ruby-forum.com/.