Alessandro Dias

Cuidado Ao Chamar Métodos Da Super Classe

| Comments

Lendo um pouco sobre herança em Ruby descobri uma coisa interessante, ao usar o método super em algum método, pode ocorrer da erro caso o desenvolvedor não preste atenção. Quando você redefine um método e chama super sem parênteses e sem argumentos, o Ruby irá pegar os parâmetros passados para o método na subclasse passar de forma implícita para o método da superclasse, se os parâmetros do método na superclasse forem diferentes dos parâmetros no método redefinido irá resultar em erro. Exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Dad
  def hi
    puts "Hello "
  end
end

Class Child < Dad
  def hi(name)
    super
    puts name
  end
end

Child.new('alessandro').hi

=> ArgumentError: wrong number of arguments (1 for 0)

Como resolver isso? Simples. Caso o método da superclasse não receba parâmetros chame o método super com parênteses super() Exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Dad
  def hi
    puts "Hello "
  end
end

Class Child < Dad
  def hi(name)
    super()
    puts name
  end
end

Child.new('alessandro').hi
=> Hello
=> alessandro

Comments