我不知道mixin
和mixin::with
模块之间有什么区别?
package Dog;
sub speak { print "Bark!\n" }
sub new { my $class = shift; bless {}, $class }
package Dog::Small;
use base 'Dog';
sub speak { print "Yip!\n"; }
package Dog::Retriever;
use mixin::with 'Dog';
sub fetch { print "Get your own stinking $_[1]\n" }
package Dog::Small::Retriever;
use base 'Dog::Small';
use mixin 'Dog::Retriever';
my $small_retriever = Dog::Small::Retriever->new;
$small_retriever->speak; # Yip!
$small_retriever->fetch('ball'); # Get your own stinking ball
在上面的代码中,可以使用以下代码:
package Dog::Small::Retriever;
use base 'Dog::Small';
use mixin 'Dog::Retriever';
替换为以下一个?
package Dog::Small::Retriever;
#use base 'Dog::Small';
use mixin:with 'Dog::Retriever';
答案 0 :(得分:2)
看起来mixin :: with旨在用于定义添加/更改行为的类(在您的示例中为Dog :: Small和Dog :: Retriever),而mixin用于最终消费类(Dog: :小猎犬::)
。但是请注意documentation for mixin::with建议“不要使用mixins,请考虑使用traits。请参阅Class :: Trait进行实现。”反过来,Class :: Trait已被弃用,并建议使用Moose :: Role。
哦 - 您不能跳过use base 'Dog::Small'
声明 - 如果您这样做,您的课程将不会继承Dog::Small
(或Dog
)。