2013-04-22 3 views
2

как родительский, так и @ISA, выполняющий ту же работу, что и использование родителя и @ISA соответственно.В чем разница между родителем и @ISA?

package Baz; 
    use parent qw(Foo Bar); 

или

package Baz; 
    BEGIN 
    { 
     require Foo; 
     require Bar; 
     push @ISA, qw(Foo Bar); 
    } 
+0

Вы спрашиваете, что делает '@ ISA'? С помощью методов вызывается поиск унаследованных методов. – ikegami

ответ

8

use parent просто кратким способом делать require и толкая имя пакета на @ISA в одном заявлении. Это происходит во время компиляции вместо простого our @ISA = qw/ Foo Bar /, который выполняется во время выполнения, и означает, что вам нужно закодировать имя пакета только один раз, что может уменьшить ошибки. Это также вызовет предупреждение, если пакет пытается наследовать из пакета с тем же именем, что было бы бесполезным и могло вызвать бесконечный цикл наследования.

Короче говоря, use parent - это более краткий и простой способ получить все правильно.

4

parent является синтаксическим сахаром, чтобы установить переменную пакета @ISA и автоматически загружать его суперклассы во время компиляции. Как заявляет parent documentation, нет функциональной разницы между двумя кодовыми блоками в OP.

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