From: "Glass_saga (Masaki Matsushita)" Date: 2012-11-11T23:15:10+09:00 Subject: [ruby-dev:46481] [ruby-trunk - Feature #6643] io.seek(off, :end) Issue #6643 has been updated by Glass_saga (Masaki Matsushita). File patch3.diff added :setか:SETの類だけ受け付ければ良いのであれば、小文字のシンボルも大文字のシンボルも変数として持っておいて良いんじゃないかなあと思いました。 (あまりスマートではない気もしますが) # :Setや:Currentも使えた方が良い、という人はいませんよね? なので、そのようにしたpatchをつくりました。 :eNdのようなシンボルまで受け付けてしまう問題、エラーメッセージの正確さの問題はこれで解決します。 また、先のpatchではdowncase!して小文字に合わせていたので、大文字が好みの人にだけメソッド呼び出しのコストを強いていましたが、 両方変数として持っておけばそのような事もありません。 ---------------------------------------- Feature #6643: io.seek(off, :end) https://bugs.ruby-lang.org/issues/6643#change-32778 Author: akr (Akira Tanaka) Status: Assigned Priority: Normal Assignee: akr (Akira Tanaka) Category: Target version: 2.0.0 IO#seek メソッドの whence 引数としてシンボルを受け付けるようにしませんか。 つまり、 io.seek(0, IO::SEEK_END) のかわりに io.seek(0, :end) とかけるようにする、ということです。 IO::SEEK_END と等価な指定として :end, IO::SEEK_CUR と等価な指定として :cur, IO::SEEK_SET と等価な指定として :set を 受け付けるようにします。 思い立ったきっかけとしては、 ひさしぶりに seek を使ったら、 io.seek(IO::SEEK_END) と書いてしまって、これは私の環境では IO::SEEK_END が 2 なので、 io.seek(2) つまり io.seek(2, IO::SEEK_SET) と解釈されてしまって、ちょっと悩んだためです。 もし同様な間違いをしてしまっても、IO::SEEK_END でなく :end と 書いたのであれば、 io.seek(:end) は can't convert Symbol into Integer (TypeError) となるので悩まなくて済んだのに、 と思いました。 なお、その間違いをしたのは私だけではないようで、検索すると http://jira.codehaus.org/browse/JRUBY-1897 http://rubyforge.org/pipermail/biocatalogue-developers/attachments/20100512/2eacb73c/attachment-0001.html というふたつの例が見つかります。 どうでしょうか。 -- http://bugs.ruby-lang.org/