問題タブ [seekableiterator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - PHP: SeekableIterator インターフェイスの実装
現在、SeekableIterator インターフェイスを実装するクラスを作成していて、問題が発生しました。使用している 2 つの内部配列があり、クラスの外部から両方を反復できるようにしたいと考えています。最初にクラス内で 2 つの配列をマージせずにこれを行う簡単な方法はありますか? これが私がやろうとしていることの簡単な例です:
php - PHP: SeekableIterator::seek()
SeekableIterator インターフェイスを完成させるために seek() を実装したい場合、シークされた位置が無効な場合、内部的に古い位置に戻す必要がありますか? このような:
php - PHP: SeekableIterator をループする
AWS EC2 などのクラウド ストレージの解決に関する php プロジェクトに取り組んでいます。
と のような結果を返そうとしSplFileInfo
ますDirectoryIterator
。
まず、FileInfo
モックするために入力しましたSplFileInfo
Directory
第二に、私はモックするために入力しましたDirectoryIterator
次に、問題は私が istancing する必要がある場所です。呼び出されるFileInfo
たびにオブジェクトをインスタンス化するのは適切current()
ですか? またはすべてのオブジェクトをインスタント化します__construct()
か?
そして、コードヒントのためだけに をDirectoryIterator
実装するのはなぜですか?SplFileInfo
php - PHP SeekableIterator : OutOfBoundsException をキャッチするか、valid() メソッドをチェックしますか?
したがって、これが PHP のバグのある設計なのか、それとも同じインターフェイスで一貫性のない結果を処理するための理解されたロジックがあるのかはわかりません。
SeekableIterator インターフェイスには 2 つのメソッド (seek
およびvalid
) があり、これらは互いに競合しているか、互いに一貫して動作するはずですが、両方とも表示されます。
インターフェイスのドキュメントにはseek
、クラス OutOfBoundsException の例外をスローする必要があると記載されていますが、これは、例外をスローする前valid
にイテレーターの位置が更新されない限りvalid
(明らかに false を返すように)、の有用性を無効にしているようです (これは明らかにキャッチする必要があります)。
3 つのテスト例
例 1。
ドキュメントの例で提供されているように、SeekableIterator を実装するカスタム クラス:
クラス:
例 1. テスト:
テスト 1 の出力:
例 2:
ネイティブ ArrayIterator::seek の使用
テスト 2 コード:
テスト 2 の出力:
例 3:
ネイティブ DirectoryIterator::seek の使用
テスト 3 コード:
テスト 3 の出力:
valid()
では、有効な位置を確認するために使用するかどうかを合理的に知るにはどうすればよいでしょうか。また、位置を更新する代わりに Exception がスローされる可能性がseek($position)
あることを予測して、true を返すのでしょうか?seek()
valid()