50

似乎有一个名为的新 pragmaparentbase. 什么parent保证了新的(非核心)模块?我错过了什么?

4

2 回答 2

53

base试图做太多的事情——自动处理加载模块,但也允许从已经加载的类(可能来自名称不是基于模块名称的文件)建立继承。为了让它发挥作用,在某些情况下,有一些骇客行为会导致令人惊讶的结果。不是破坏向后兼容性,而是parent引入了具有更清晰语义的新替换编译指示。

parent将成为 5.10.1 的核心模块。

更新:忘记了base句柄fields(如果您使用的是fields编译指示),这parent是不行的。

于 2009-05-18T07:26:50.140 回答
42

借助来自 ysth 的额外信息,我能够看到文档中的差异:

basepragma 执行以下操作:

  • 将命名包添加到@ISA
  • 加载与命名包同名的模块require(除非它检测到包已经加载)
  • 如果与包同名的模块不存在,则不会失败
  • 如果命名包中没有符号,则死亡
  • 如果$VERSION命名包中不存在,则 base 将其设置为"-1, set by base.pm"
  • fields如果存在,则初始化命名包的
  • 不调用命名包的导入函数

parentpragma 执行以下操作:

  • 将命名包添加到@ISA
  • 加载与命名包同名的模块require
  • 如果不存在与包同名的模块,则接受一个选项,告诉它不要死
于 2009-05-18T13:43:47.477 回答