On 2/12/06, Jeppe J. [email protected] wrote:
end
Thanks in advance
You are confusing classes and instances of classes. You are defining
methods for the Array class, not for actual array instances.
class A
def A.foo
puts “Class method of #{self.inspect}, instance of class
#{self.class}”
end
def foo
puts “Instance method for #{self.inspect}, of class #{self.class}”
end
end
A.foo # prints “Class method of A, instance of class Class”
a = A.new
a.foo # prints “Instance method of <#A:0xb7ce9000> of class A”
You can implement sum like so:
class Array
def sum
total = 0
# self refers to the current array instance
self.each { |elem| total += elem }
total
end
# but you can also implement sum on the class Array itself. But
then
# you need to provide the array, that you want to know the sum of
#
def Array.sum arr
arr.inject(0) { |total, elem| total += elem }
end
end
puts [1,2,3,4].sum
puts Array.sum([1,2,3,4,5])
be careful with “pop”, it changes the Array!
def sum!(arr)
total = 0
total += arr.pop until a.empty?
total
end
arr = [5,4,3]
p arr.sum! #=> 12
p arr #=> [] arr is now empty!
-Levin