2015-03-11 3 views
1

У меня есть эта часть кода в Ruby.Перегрузка функций в Ruby

class Superheros 
class<<self 

    def foo1(param1) 
     print "foo1 got executed\n" 
    end 

    def foo1 
     print "foo1 without param got executed\n" 
    end 
    def foo3(param1,param2) 
     print "foo3 got executed\n" 
    end 
end 
end 

print Superheros.foo3(2,3) 
print Superheros.foo1 
print Superheros.foo1 
print Superheros.foo1(5) 

Я получаю ошибку в Superheros.foo1(5). Но у меня уже есть функция foo1(param1), чтобы соответствовать ей, но она дает мне ошибку `foo1': wrong number of arguments (1 for 0) (ArgumentError)

Почему это? PS: Я узнал, удалил ли я имя функции без параметр Superheros.foo1(5) работает просто отлично.

ответ

3

Ruby не поддерживает перегрузку метода. В вашем коде второе определение foo1 заменило первое. Вот почему вы получаете сообщение об ошибке при попытке передать аргументы, метод, который принимает аргументы, исчез.

Существует вопрос о SO по этой теме here, с некоторыми хорошими пояснениями.

1

Может быть, вы могли бы использовать переменные аргументы:

def foo1(*args) 
    case args.length 
    when 1 
     puts "Function A" 
    when 2 
     puts "Function B" 
    else 
     puts "Called with #{args.length} arguments" 
    end 
end 
+0

Да, я понял это. Другой подход к перегрузке функции. Довольно пятно. – SeasonalShot

Смежные вопросы