Dir: fchdir と for_fd を追加 (Ruby 3.3)#3309
Conversation
どちらも Ruby 3.3 で追加されたメソッド。実機で確認し #@SInCE 3.3 で分岐した。 Dir.fchdir ファイルディスクリプタでカレントディレクトリを変更する Dir.for_fd ファイルディスクリプタからパスを持たない Dir を作る 配置は関連メソッドの近くにした。fchdir は Dir.chdir の直後、for_fd は Dir.new / Dir.open の後。あわせて Dir.chdir に fchdir への SEE を足した。 fchdir はブロックなしで 0、ブロックありでブロックの評価結果を返し、変更は ブロック実行中に限られる。ブロック引数は nil なので、シグネチャは Dir.fchdir(fd) { ... } とした (rdoc の call-seq に合わせた)。 例はカレントディレクトリを変更するため、同ファイルの Dir.chdir の例と同じ /var/spool/mail・/usr のスタイルに揃えた。 for_fd は POSIX の fdopendir() を使い、非 POSIX 環境では NotImplementedError になる。返る Dir はパスを持たず Dir#path が nil を返すことを実機で確認し、 例に示した。 bitclust のデータベース生成を 3.1 / 3.2 / 3.3 / 3.4 / 4.0 で実行してエラーが 出ないこと、登録されるメソッドが 0 / 0 / 2 / 2 / 2 件と 3.3 追加どおりに なることを確認済み。for_fd の例は対象の全バージョンで実行して出力を確認した。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
レビューありがとうございます。実機(all-ruby, Ruby 3.0.7〜4.0.6)で挙動を確認しました。
1 点だけ修正をお願いできればと思います。
|
|
レビューありがとうございます。ご指摘の SEE を版で囲み、任意とされていた相互 SEE も入れました。
|
|
対応ありがとうございます。確認しました。
3.0 / 3.3 で statichtml をビルドし、3.0 版では |
概要
Ruby 4.0 に存在するのにリファレンスに項目が無い [c:Dir] のメソッド 2 個を追加しました。
どちらも Ruby 3.3 で追加されたものです。
Dir.fchdir— ファイルディスクリプタでカレントディレクトリを変更するDir.for_fd— ファイルディスクリプタからパスを持たない [c:Dir] を作る登場バージョン
実機で確認しました。どちらも 3.3 からです。
記述の根拠
Dir.fchdirはブロックなしで 0 を、ブロックありでブロックの評価結果を返し、変更はブロック実行中に限られます。ブロック引数は nil だったため、シグネチャは
Dir.fchdir(fd) { ... }としました (rdoc の call-seq に合わせています)。例はカレントディレクトリを変更するので、同ファイルの
Dir.chdirの例と同じ/var/spool/mail・/usrのスタイルに揃えました。Dir.for_fdは POSIX のfdopendir()を使い、非 POSIX 環境では[c:NotImplementedError] になります。返る [c:Dir] はパスを持たず、
[m:Dir#path] が nil を返すことを実機で確認しました。
検証
Dir.for_fdの例は 3.3 / 3.4 / 4.0 で実行して出力を確認しました。rake check_blank_lines/check_indent_in_samplecode/check_single_space_indentbitclust update --markdowntree=manual/apiを 3.1 / 3.2 / 3.3 / 3.4 / 4.0 で実行し、エラーが出ないこと、登録されるメソッドが 0 / 0 / 2 / 2 / 2 件と 3.3 追加どおりに
なることを確認しました。
🤖 Generated with Claude Code