Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl vs ISA是否在UNIVERSAL中_Perl_Oop - Fatal编程技术网

Perl vs ISA是否在UNIVERSAL中

Perl vs ISA是否在UNIVERSAL中,perl,oop,Perl,Oop,我以前从来没有在Perl程序中看到过DOES,但它在OnUniversal中也有 不过,我不完全理解的作用和ISA之间的区别。规范谈到角色,可能通过聚合、委托和模拟来完成。在Perl中,我所知道的唯一一种类关系是通过@ISA数组进行继承(或者通过使用parent或base),我认为角色仅可用于Moose等。文档还指出,大多数时候做的事情和ISA做的事情都是一样的 您能举一个例子,说明和ISA返回不同的值吗?使用角色时,这两种方法的实际区别是什么UNIVERSAL::DOES的行为与UNIVERS

我以前从来没有在Perl程序中看到过
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中没有内置的概念使
做任何有趣的事情;它必须由代码提供。@NateGlenn
UNIVERSAL->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库时才能找到它。