On Thu, Sep 19, 2002 at 07:15:51AM +0900, Berge, Robert wrote:
> I have the following code snippet:
>  
> class SomeClass
>      def meth1( to = 'default1', msg = 'default2' )
>         ...
>      end
> end
>  
> param1 = nil ## value is nil because of selecting from a nullable db field
> param2 = "Some Message" 
>  
> sc.meth1(  param1, param2 )
>  
>  
> The to variable is nil inside meth1, it is not getting assigned the default
> value.  Is this is a bug in how ruby handles default values?  Or is there
> something I have wrong in my code?  Any ideas?

Ruby doesn't fill in default values whenever you pass in nil; it fills
in default values whenever you don't pass in a particular argument,
e.g.:

  def foo(a='string1', b='string2')
    p a
    p b
  end
  
  foo('foo', 'bar') #=> "foo"
                        "bar"
  foo('foo')        #=> "foo"
                        "string2"
  foo('foo', nil)   #=> "foo"
                        nil

If you want Ruby to fill in your default values whenever nil is passed
in, then you can write:

  class SomeClass
       def meth1(to=nil, msg=nil)
         to ||= 'default1'
         msg ||= 'default2'
         p to
         p msg
       end
  end

  param1 = nil
  param2 = "Some Message"

  sc = SomeClass.new
  sc.meth1(  param1, param2 ) #=> "default1"
                              #=> "Some Message"

Hope this helps,

Paul