Perl vs ISA是否在UNIVERSAL中
我以前从来没有在Perl程序中看到过Perl vs ISA是否在UNIVERSAL中,perl,oop,Perl,Oop,我以前从来没有在Perl程序中看到过DOES,但它在OnUniversal中也有 不过,我不完全理解的作用和ISA之间的区别。规范谈到角色,可能通过聚合、委托和模拟来完成。在Perl中,我所知道的唯一一种类关系是通过@ISA数组进行继承(或者通过使用parent或base),我认为角色仅可用于Moose等。文档还指出,大多数时候做的事情和ISA做的事情都是一样的 您能举一个例子,说明和ISA返回不同的值吗?使用角色时,这两种方法的实际区别是什么UNIVERSAL::DOES的行为与UNIVERS
DOES
,但它在OnUniversal中也有
不过,我不完全理解的作用
和ISA
之间的区别。规范谈到角色,可能通过聚合、委托和模拟来完成。在Perl中,我所知道的唯一一种类关系是通过@ISA数组进行继承(或者通过使用parent
或base
),我认为角色仅可用于Moose等。文档还指出,大多数时候做的事情和ISA做的事情都是一样的
您能举一个例子,说明和ISA
返回不同的值吗?使用角色时,这两种方法的实际区别是什么UNIVERSAL::DOES
的行为与UNIVERSAL::isa
相同,但Moose、Mouse和Moo都在其对象类上提供了DOES
方法,对于使用给定角色的类,这些方法返回true。因此,只有提供角色的框架才能覆盖这些方法,而不是支持任何一种角色的本机思想,而是手动重写它,这样Type::Tiny Type约束在$Type->(“Type::API::Constraint”)
中返回true。完全是文档/规范-它不是驼鹿意义上的角色。@NateGlenn或多或少是的。tobyink的观点是正确的,因为它不必只是“用于框架”,但您是对的,perl中没有内置的概念使做任何有趣的事情;它必须由代码提供。@NateGlennUNIVERSAL->can(“DOES”)
在添加DOES之前,在perl的旧版本(UNIVERSAL的旧版本)上返回false。我想那是在5.12.0中。@NateGlenn-!!1
和1
是不同的-这可以使用Devel::Peek进行验证。但是,如果您将它们视为字符串、数字或布尔值(即几乎总是),它们的行为是相同的@hobbs:UNIVERSAL::Dos是在Perl5.10中添加的,但是Type::Tiny支持5.6.1及以上版本。您选择了一个特定于Moose的答案。但问题并不是针对驼鹿的,我想这才是重点。Perl在这两者之间没有任何内置的区别,而是让库作者自行实现。在普通的Perl程序中没有区别。只有在使用像Moose这样的OOP库时才能找到它。