Variable argument number and behaviour [Newbie]

Hello Everyone,

I’m trying to make a function take arguments in a particular way.

This is what I want to create:

#Variable argument testing
def function(*sometimes)

if sometimes.nil?
print “Not given!”
else
print “Here!”
end

end

function
[EOF]

As I understand it, the * operator bundles the argument into an array,
so that if test returns true. I know that I can use “if
sometimes.length==0” to get the same behaviour, but that is rather
obscure compared to the first version.

Is there some other way to set up the argument list? (Alas, I have found
nothing in the documentation or the Forum.)

Thank you,
-Ryan

Alle domenica 1 luglio 2007, Ryan Allan ha scritto:

print "Not given!"

so that if test returns true. I know that I can use “if
sometimes.length==0” to get the same behaviour, but that is rather
obscure compared to the first version.

Is there some other way to set up the argument list? (Alas, I have found
nothing in the documentation or the Forum.)

Thank you,
-Ryan

I can’t think of any other way to make a method take any number of
arguments,
but remember that there’s a shorter way to tell whether an array is
empty:
the empty? method:

def function(*sometimes)
if sometimes.empty?
print “Not given!”
else
print “Here!”
end
end

This way, it’s as clear as what you wanted to use. Besides, even if it
had
been possible, your approach would have had a problem: you wouldn’t have
been
able to distinguish the case of a single nil argument from the case of
no
arguments:

function(nil)

function()

The correct approach solves this problem: if no arguments are passed,
sometimes is empty (empty? returns true); otherwise it’s not empty, even
if
all arguments are nil.

I hope this helps

Stefano

Thank you Stefano.
You’re right; the empty? method is nicely obvious.
I do have a further question, however. You’ve highlighted a problem
with my original idea, but I don’t understand it.

Besides, even if it
had been possible, your approach would have had a problem: you wouldn’t have
been able to distinguish the case of a single nil argument from the case of
no arguments:

function(nil)

function()

The correct approach solves this problem: if no arguments are passed,
sometimes is empty (empty? returns true); otherwise it’s not empty, even
if all arguments are nil.

What is the difference between no arguments and a single nil argument?
It seems to me that the cases are logically equivalent. Ruby treats them
separately?

Thanks again,
-Ryan

Thank you David. That makes much more sense now.

Hi –

On Mon, 2 Jul 2007, Ryan Allan wrote:

function(nil)

function()

The correct approach solves this problem: if no arguments are passed,
sometimes is empty (empty? returns true); otherwise it’s not empty, even
if all arguments are nil.

What is the difference between no arguments and a single nil argument?
It seems to me that the cases are logically equivalent. Ruby treats them
separately?

Yes, because nil is an object.

def meth(x)
p x
end

meth(1) # 1
meth(nil) # nil
meth # ArgumentError: wrong number of arguments

David