First I should say rubymonk is a great web site for ruby learners.
I just have some time this afternoon so I dived my self into this language and found it quite amazing!
Look at this code snippet below. Besides a variable parameter list, it's also possible to add naming parameters to your method arguments.
def add(*numbers)
numbers.inject(0) { |sum, number| sum + number }
end
def subtract(*numbers)
sum = numbers.shift
numbers.inject(sum) { |sum, number| sum - number }
end
def calculate(*arguments)
# if the last argument is a Hash, extract it
# otherwise create an empty Hash
options = arguments[-1].is_a?(Hash) ? arguments.pop : {}
options[:add] = true if options.empty?
return add(*arguments) if options[:add]
return subtract(*arguments) if options[:subtract]
end
invoking add(4, 5) returns 9 ?
invoking add(-10, 2, 3) returns -5 ?
invoking add(0, 0, 0, 0) returns 0 ?
invoking subtract(4, 5) returns -1 ?
invoking subtract(-10, 2, 3) returns -15 ?
invoking subtract(0, 0, 0, 0, -10) returns 10 ?
defaults to addtion when no option is specified ?
invoking calculate(4, 5, add: true) returns 9 ?
invoking calculate(-10, 2, 3, add: true) returns -5 ?
invoking calculate(0, 0, 0, 0, add: true) returns 0 ?
invoking calculate(4, 5, subtract: true) returns -1 ?
invoking calculate(-10, 2, 3, subtract: true) returns -15 ?
invoking calculate(0, 0, 0, 0, -10, subtract: true) returns 10 ?