argra****@users*****
argra****@users*****
2011年 9月 5日 (月) 03:20:26 JST
Index: docs/modules/mro-1.00/mro.pod diff -u docs/modules/mro-1.00/mro.pod:1.4 docs/modules/mro-1.00/mro.pod:1.5 --- docs/modules/mro-1.00/mro.pod:1.4 Fri May 27 01:58:11 2011 +++ docs/modules/mro-1.00/mro.pod Mon Sep 5 03:20:25 2011 @@ -84,8 +84,9 @@ =end original -伝統的な Perl のデフォルトの MRO (深さ優先探索; ここでは C<DFS> と -呼ばれます)にくわえて、Perl は C3 MRO も提供するようになりました。 +伝統的な Perl のデフォルトの MRO (深さ優先探索 (depth first search); +ここでは C<DFS> と呼ばれます)に加えて、Perl は C3 MRO も +提供するようになりました。 Perl の C3 対応は Stevan Little による L<Class::C3> モジュールで行われた 作業を基としていて、ここにある C3 関係の文章のほとんどは、そこから直接 コピーされたものです。 @@ -177,9 +178,8 @@ =end original 与えられたクラスの、線形化された MRO を含む配列リファレンスを返します。 -Uses whichever MRO is currently in effect for that class by default, -or the given MRO (either C<c3> or C<dfs> if specified as C<$type>). -(TBT) +このクラスで有効な MRO はデフォルトか、あるいは与えられた MRO +(C<$type> として指定されていれば C<c3> か C<dfs> のどちらか) かを使います。 =begin original @@ -250,11 +250,10 @@ このクラスの C<mro_isarev> を取得して、クラス名の配列リファレンスとして 返します。 -These are every class that "isa" -the given class name, even if the isa relationship is -indirect. This is used internally by the MRO code to -keep track of method/MRO cache invalidations. -(TBT) +これは、例え isa 関係が間接的であっても、与えられたクラス名に対して +"isa" 関係にある全てのクラスです。 +これは、メソッド/MRO キャッシュの無効化を記録するために MRO コードによって +内部的に使われます。 =begin original @@ -273,18 +272,15 @@ =end original 現在のところ、このリストは伸びるだけで、縮むことはありません。 -This -was a performance consideration (properly tracking and -deleting isarev entries when someone removes an entry -from an C<@ISA> is costly, and it doesn't happen often -anyways). The fact that a class which no longer truly -"isa" this class at runtime remains on the list should be -considered a quirky implementation detail which is subject -to future change. It shouldn't be an issue as long as -you're looking at this list for the same reasons the -core code does: as a performance optimization -over having to search every class in existence. -(TBT) +これは性能を考慮したものです (誰かが C<@ISA> からエントリを削除したときに +適切に追跡して isarev エントリを削除するのは重い処理で、どちらにしろ +しょっちゅう起きることではありません)。 +実行時にはもはや本当にはこのクラスの "isa" ではないクラスがリストに +残っているということは、将来変更される予定の奇妙な実装詳細であると +考えられています。 +このリストを、コアコードと同じ理由(つまり存在する全てのクラスを +検索することに対しての性能の最適化)で見ている限りは +問題にならないはずです。 =begin original @@ -398,13 +394,11 @@ =end original -This is intended for authors of modules which do lots -of class introspection, as it allows them to very quickly -check if anything important about the local properties -of a given class have changed since the last time they -looked. It does not increment on method/C<@ISA> -changes in superclasses. -(TBT) +これは多くのクラスを調査するモジュールの作者のためを意図したもので、 +与えられたクラスに対して最後に調べてからローカルな属性についての +何か重要なことが変更されたかどうかを素早く調べられるようにします。 +これはスーパークラスでのメソッド/C<@ISA> の変更では +インクリメントされません。 =begin original @@ -416,12 +410,9 @@ =end original -It's still up to you to seek out the actual changes, -and there might not actually be any. Perhaps all -of the changes since you last checked cancelled each -other out and left the package in the state it was in -before. -(TBT) +実際の変更を探し求めるのは自由ですが、実際には何もないかもしれません。 +おそらく最後にチェックしてからの全ての変更はお互いにキャンセルされ、 +以前の状態のパッケージのままなのでしょう。 =begin original @@ -436,15 +427,13 @@ =end original -This integer normally starts off at a value of C<1> -when a package stash is instantiated. Calling it -on packages whose stashes do not exist at all will -return C<0>. If a package stash is completely -deleted (not a normal occurence, but it can happen -if someone does something like C<undef %PkgName::>), -the number will be reset to either C<0> or C<1>, -depending on how completely package was wiped out. -(TBT) +この整数は、通常パッケージスタッシュが実体化されたときに C<1> から +開始します。 +スタッシュが全く存在しないパッケージに対して呼び出すと、C<0> を返します。 +パッケージスタッシュが完全に削除された場合 (通常は起きませんが、誰かが +C<undef %PkgName::> のようなことをしたときに起こります)、数値は +C<0> か C<1> にリセットされます (どちらになるかはどのようにしてパッケージが +完全に削除されたかに依ります)。 =head2 next::method @@ -540,12 +529,9 @@ =end original -最後に、it searches down the C3 MRO list until -it reaches the contextually enclosing class, then -searches further down the MRO list for the next -method with the same name as the contextually -enclosing method. -(TBT) +最後に、文脈的に囲まれているクラスに到達するまで C3 MRO リストを検索して、 +文脈的に囲まれているメソッドと同じ名前の次のメソッドのために +MRO リストを検索します。 =back @@ -570,13 +556,9 @@ =end original -This is substantially different than the behavior -of C<SUPER> under complex multiple inheritance. -(This becomes obvious when one realizes that the -common superclasses in the C3 linearizations of -a given class and one of its parents will not -always be ordered the same for both.) -(TBT) +これは複雑な多重継承での C<SUPER> の振る舞いとは大きく異なります。 +(これは、あるクラスの C3 線形化での共通スーパークラスと、その親が +いつも同じ順序になるわけではないということに気付けば明らかです。) =begin original @@ -584,8 +566,7 @@ =end original -B<Caveat>: Calling C<next::method> from methods defined outside the class: -(TBT) +B<警告>: クラスの外部で定義されたメソッドからの C<next::method> の呼び出し: =begin original @@ -596,11 +577,10 @@ =end original -There is an edge case when using C<next::method> from within a subroutine -which was created in a different module than the one it is called from. It -sounds complicated, but it really isn't. Here is an example which will not -work correctly: -(TBT) +呼び出したのと違うモジュールで作られたサブルーチン内から C<next::method> を +使うという、一つのエッジケースがあります。 +これは複雑なように聞こえますが、実際にはそうではありません。 +以下は正しく動作しない例です: *Foo::foo = sub { (shift)->next::method(@_) }; @@ -614,12 +594,12 @@ =end original -The problem exists because the anonymous subroutine being assigned to the -C<*Foo::foo> glob will show up in the call stack as being called -C<__ANON__> and not C<foo> as you might expect. Since C<next::method> uses -C<caller> to find the name of the method it was called in, it will fail in -this case. -(TBT) + +C<*Foo::foo> グロブに代入された無名サブルーチンは、想定される C<foo> ではなく +C<__ANON__> から呼び出されたものとして呼び出しスタックに現れるという +問題があります。 +C<next::method> は呼び出されたメソッドの名前を見つけるために C<caller> を +使っているので、この場合失敗します。 =begin original @@ -629,10 +609,10 @@ =end original -But fear not, there's a simple solution. The module C<Sub::Name> will -reach into the perl internals and assign a name to an anonymous subroutine -for you. Simply do this: -(TBT) +しかし心配はいりません; 簡単な解決法があります。 +C<Sub::Name> モジュールは perl の内部に手を入れて、名前を無名サブルーチンに +代入します。 +単にこうすると: use Sub::Name 'subname'; *Foo::foo = subname 'Foo::foo' => sub { (shift)->next::method(@_) }; @@ -643,8 +623,7 @@ =end original -and things will Just Work. -(TBT) +うまく動きます。 =head2 next::can @@ -741,5 +720,11 @@ Based on Stevan Little's L<Class::C3> +=begin meta + +Translate: Kentaro Shirakata <argra****@ub32*****> (1.00) + +=end meta + =cut