50

parentとほぼ同じことを行うという名前の新しいプラグマがあるようbaseです。parent新しい(非コア)モジュールを保証するものは何ですか?何か不足していますか?

4

2 に答える 2

53

baseモジュールのロードを自動的に処理するだけでなく、すでにロードされているクラスから(おそらくモジュール名に基づいていない名前のファイルから)継承を確立できるようにするなど、あまりにも多くのことを実行しようとしました。それを機能させるために、いくつかのケースで驚くべき結果を引き起こしたいくつかのハッカーがありました。下位互換性を損なうのではなく、よりparentクリーンなセマンティクスを備えた新しい置換プラグマが導入されました。

parent5.10.1以降はコアモジュールになります。

更新:(プラグマを使用している場合)そのbaseハンドルを忘れましたが、そうではありません。fieldsfieldsparent

于 2009-05-18T07:26:50.140 に答える
42

ysth からの余分な情報を武器に、ドキュメントの違いを確認できました。

baseプラグマは次のことを行います。

  • 指定されたパッケージをに追加します@ISA
  • を使用して、指定されたパッケージと同じ名前のモジュールをロードしますrequire(パッケージが既にロードされていることが検出されない限り)
  • パッケージと同じ名前のモジュールが存在しなくても失敗しません
  • 指定されたパッケージにシンボルがない場合は死ぬ
  • $VERSION名前付きパッケージに存在しない場合、base はそれを"-1, set by base.pm"
  • fields指定されたパッケージが存在する場合、そのパッケージを初期化します
  • 指定されたパッケージのインポート関数を呼び出しません

parentプラグマは次のことを行います。

  • 指定されたパッケージをに追加します@ISA
  • を使用して、指定されたパッケージと同じ名前のモジュールをロードしますrequire
  • パッケージと同じ名前のモジュールが存在しない場合に終了しないように指示するオプションを受け入れます
于 2009-05-18T13:43:47.477 に答える