[ruby-trunk - Feature #6643][Open] io.seek(off, :end)

Issue #6643 has been reported by akr (Akira T.).


Feature #6643: io.seek(off, :end)

Author: akr (Akira T.)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:

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
というふたつの例が見つかります。

どうでしょうか。

(6/25/12 6:32 AM), akr (Akira T.) wrote:

Assignee:
とかけるようにする、ということです。

IO::SEEK_END と等価な指定として :end,
IO::SEEK_CUR と等価な指定として :cur,
IO::SEEK_SET と等価な指定として :set を

+1.
というかIOまわりの定数は全部シンボルで指定したいぐらい。。

(2012/06/25 23:17), KOSAKI Motohiro wrote:

IO::SEEK_END と等価な指定として :end,
IO::SEEK_CUR と等価な指定として :cur,
IO::SEEK_SET と等価な指定として :set を
+1.
というかIOまわりの定数は全部シンボルで指定したいぐらい。。

これ,例えば IO::SEEK_END も値が :end になるんでしょうか(なっちゃいけ
ない理由はあるんかな).

At Mon, 25 Jun 2012 19:32:06 +0900,
akr (Akira T.) wrote:

IO#seek $B%a%=%C%I$N(B whence
$B0z?t$H$7$F%7%s%%k$r<u$1IU$1$k$h$&$K$7$^$;$s$+!#(B

$B$D$^$j!"(B
io.seek(0, IO::SEEK_END)
$B$N$+$o$j$K(B
io.seek(0, :end)
$B$H$+$1$k$h$&$K$9$k!"$H$$$&$3$H$G$9!#(B

IO::SEEK_END $B$HEy2A$J;XDj$H$7$F(B :end,
IO::SEEK_CUR $B$HEy2A$J;XDj$H$7$F(B :cur,

:current $B$,$h$$$H;W$$$^$9!#(B

2012$BG/(B6$B7n(B25$BF|(B 23:31 SASADA Koichi [email protected]:

$B!!$3$l!$Nc$($P(B IO::SEEK_END $B$bCM$,(B :end
$B$K$J$k$s$G$7$g$&$+!J$J$C$A$c$$$1(B
$B$J$$M}M3$O$"$k$s$+$J!K!%(B

$B$7$F$b$$$$$s$G$9$,!":#$O$7$F$$$^$;$s!#(B

$BCM$K6=L#$r;}$D4qFC$J?M$,$$$k$+$b$7$l$J$$$HF,$r$h$.$C$?$@$1$G$9$,!#(B

2012$BG/(B6$B7n(B25$BF|(B 23:37 SATOH Fumiyasu [email protected]:

IO::SEEK_CUR $B$HEy2A$J;XDj$H$7$F(B :cur,

:current $B$,$h$$$H;W$$$^$9!#(B

:current $B$K$7$F$b(B
IO::SEEK_CUR $B$h$j$bC;$$$+$i$=$l$G$b$$$$$+$J$!!#(B

$B$“$k$$$O!”(B:cur $B$H(B :current $B$NN>J}<u$1IU$1$k$H$9$k$+!#(B

$B?\F#$G$9!#(B

In [email protected]
“[ruby-dev:45843] Re: [ruby-trunk - Feature #6643][Open] io.seek(off,
:end)” on Tue, 26 Jun 2012 05:10:47 +0900,
Tanaka A. [email protected] wrote:

IO::SEEK_CUR $B$HEy2A$J;XDj$H$7$F(B :cur,

:current $B$,$h$$$H;W$$$^$9!#(B

:current $B$K$7$F$b(B
IO::SEEK_CUR $B$h$j$bC;$$$+$i$=$l$G$b$$$$$+$J$!!#(B

$B$“$k$$$O!”(B:cur $B$H(B :current $B$NN>J}<u$1IU$1$k$H$9$k$+!#(B

$BN>J}$G$b$$$$5$$,$7$^$9!#(B

$BM}M3$O(B
:cur$B$O(BC$B$N(BSEEK_CUR$B$+$iO"A[$9$k!J@N$J$,$i$N!K?MMQ$G!"(B
:current$B$O(BSEEK_*$B$r0U<1$7$J$/$F$b8+$F$9$0$o$+$j$?$$!J:G6a$N!K?MMQ(B
$B$H$$$&$h$&$K!J;d$K$O!K<+A3$JDs6!M}M3$r$D$1$i$l$k$+$i$G$9!#(B

2012$BG/(B6$B7n(B26$BF|(B 22:56 Kazuhiro NISHIYAMA [email protected]:

$B$+$iO"A[$9$k$H6&DL$N(B prefix $B$r>JN,$7$?%7%s%%k$K$J$j$=$&$J$N$G!“(B
$BBgJ8;z$N(B :END $B$d(B :CUR $B$J$I$K$J$k$N$+$H;W$C$?$N$G$9$,!”(B
$B>.J8;z$K$7$?$N$O$J$<$G$7$g$&$+(B?

$B$“$!!”$?$7$+$K!#BgJ8;z$,$$$$$+$J$!!#(B

$B%=%1%C%H%i%$%V%i%j$N2~A1(B
ソケットライブラリの改善 - 日本Ruby会議2009

$B$+$iO"A[$9$k$H6&DL$N(B prefix $B$r>JN,$7$?%7%s%%k$K$J$j$=$&$J$N$G!“(B
$BBgJ8;z$N(B :END $B$d(B :CUR $B$J$I$K$J$k$N$+$H;W$C$?$N$G$9$,!”(B
$B>.J8;z$K$7$?$N$O$J$<$G$7$g$&$+(B?

Socket$B$N>l9g$O!“1QC18l$+$i$OA[A|$7$E$i$$F0:n$r$9$k%1!<%9$,$^$^$”$k$N$G(B
C$BM3Mh$@$+$i!“;zLL$r?.$8$:$K%^%K%e%”%k$A$c$s$HFI$_$d$,$l$H$$$&%K%e%“%s%9$,(B
$BI:$C$F$$$F!“BgJ8;z$,$9$4$/$$$$46$8$@$C$?$N$G$9$,!”$3$A$i$O$I$&$J$s$G$7$g$&$M!#(B
$BBgJ8;z$G(B :CURRENT $B$C$F$/$I$/$J$$$G$9!)(B
C$BM3Mh$A$C$/$JL>A0$K$9$k$J$i(B CUR$B$@$1$G$$$$$h$&$J5$$,$9$k$J$”(B

bikeshed$B$C$F$I$&$7$F$3$&$b?M$r$R$-$D$1$k$N$+(B

$B@>;3OB9-$G$9!#(B

At Tue, 26 Jun 2012 05:10:47 +0900,
Tanaka A. wrote:

IO::SEEK_CUR $B$HEy2A$J;XDj$H$7$F(B :cur,

:current $B$,$h$$$H;W$$$^$9!#(B

:current $B$K$7$F$b(B
IO::SEEK_CUR $B$h$j$bC;$$$+$i$=$l$G$b$$$$$+$J$!!#(B

$B$“$k$$$O!”(B:cur $B$H(B :current $B$NN>J}<u$1IU$1$k$H$9$k$+!#(B

$BN>J}$,NI$$$K0lI<!#(B

$B$=$l$H$OJL$K(B

$B%=%1%C%H%i%$%V%i%j$N2~A1(B
http://rubykaigi.org/2009/ja/talks/19M02

$B$+$iO"A[$9$k$H6&DL$N(B prefix $B$r>JN,$7$?%7%s%%k$K$J$j$=$&$J$N$G!“(B
$BBgJ8;z$N(B :END $B$d(B :CUR $B$J$I$K$J$k$N$+$H;W$C$?$N$G$9$,!”(B
$B>.J8;z$K$7$?$N$O$J$<$G$7$g$&$+(B?

$B$+$iO"A[$9$k$H6&DL$N(B prefix $B$r>JN,$7$?%7%s%%k$K$J$j$=$&$J$N$G!"(B
$BBgJ8;z$N(B :END $B$d(B :CUR $B$J$I$K$J$k$N$+$H;W$C$?$N$G$9$,!"(B
$B>.J8;z$K$7$?$N$O$J$<$G$7$g$&$+(B?

$B$"$!!"$?$7$+$K!#BgJ8;z$,$$$$$+$J$!!#(B

$B$I$A$i$+$@$1$K$7$?$$M}M3M}M3$,FC$K$J$$$N$J$i!"BgJ8;z$b>.J8;z$b(B
$BN>J}<u$1IU$1$k$h$&$K$9$l$PNI$$$N$G$O$J$$$G$7$g$&$+!#(B

$B$3$s$K$A$O!"$J$+$`$i(B($B$&(B)$B$G$9!#(B

In message “[ruby-dev:45864] Re: [ruby-trunk - Feature #6643][Open]
io.seek(off, :end)”
on Jun.28,2012 03:51:25, [email protected] wrote:

Socket$B$N>l9g$O!“1QC18l$+$i$OA[A|$7$E$i$$F0:n$r$9$k%1!<%9$,$^$^$”$k$N$G(B
C$BM3Mh$@$+$i!“;zLL$r?.$8$:$K%^%K%e%”%k$A$c$s$HFI$_$d$,$l$H$$$&%K%e%"%s%9$,(B

$BI:$C$F$$$F!“BgJ8;z$,$9$4$/$$$$46$8$@$C$?$N$G$9$,!”$3$A$i$O$I$&$J$s$G$7$g$&$M!#(B
$BBgJ8;z$G(B :CURRENT $B$C$F$/$I$/$J$$$G$9!)(B

C$BM3Mh$A$C$/$JL>A0$K$9$k$J$i(B CUR$B$@$1$G$$$$$h$&$J5$$,$9$k$J$"(B

$B$3$&$$$&;~$O92$F$:A{$,$:B>$N8@8l$NNc$r$G$9$M(B…

C++: std::ios$B$N(Bbeg, cur, end
SEEK_SET$B$,(Bbeg$B$K$J$C$F$k$3$H$,L$r0z$-$^$9$M!#(B

.NET: SeekOrigin$B$N(BBegin, Current, End
$B$3$C$A$O%U%k%M!<%`!#$d$C$Q$j(BSEEK_SET$B$O(BBegin$B$K$J$j$^$9!#(B

$BB>$K$bD4$Y$?$s$G$9$,!“(BSEEK_SET$BAjEv$7$+Ds6!$7$J$$$H$+!”(BC$B$NDj?t(B
$B$NCM(B(0,1,2)$B$r;XDj$9$k$7$+$J$/$FL>A0$,IU$$$F$J$$$H$+!"$=$s$J$s(B
$B$,B?$+$C$?$G$9$M(B…

bikeshed$B$C$F$I$&$7$F$3$&$b?M$r$R$-$D$1$k$N$+(B

$B$$$d$^$C$?$/!#(B

$B$=$l$G$O!#(B

Issue #6643 has been updated by ko1 (Koichi Sasada).

Status changed from Open to Assigned
Assignee set to akr (Akira T.)


Feature #6643: io.seek(off, :end)

Author: akr (Akira T.)
Status: Assigned
Priority: Normal
Assignee: akr (Akira T.)
Category:
Target version:

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
というふたつの例が見つかります。

どうでしょうか。

Issue #6643 has been updated by Glass_saga (Masaki M.).

こんにちは。

(Mon, 25 Jun 2012 23:31:12 +0900), SASADA Koichi wrote:

これ,例えば IO::SEEK_END も値が :end になるんでしょうか(なっちゃいけない理由はあるんかな).

IO::SEEK_XXXの値もSymbolにした上でSymbolを受け付けるIO#seekを作ってみたところ、StringIOで引っかかりました。
ext/stringio/stringio.cのstrio_seek()が、IO::SEEK_XXXはFixnumであるという前提の元に書かれているので、値を変えてしまうと動きません。

これがStringIOだけなら良いのですが、サードパーティの拡張ライブラリにも同様のものがあるかも知れません。

Feature #6643: io.seek(off, :end)

Author: akr (Akira T.)
Status: Assigned
Priority: Normal
Assignee: akr (Akira T.)
Category:
Target version:

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
というふたつの例が見つかります。

どうでしょうか。

Issue #6643 has been updated by kou (Kouhei S.).

"type mismatch: %s
given"というエラーメッセージに、「本当はIntegerかSymbolで指定して欲しかったんだよ!」みたいな情報が入っていると、間違ったオブジェクトを指定してしまった時にどうすればうまく動くようにできるかがわかりやすくなってうれしいなぁと思いました!

Feature #6643: io.seek(off, :end)

Author: akr (Akira T.)
Status: Assigned
Priority: Normal
Assignee: akr (Akira T.)
Category:
Target version:

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
というふたつの例が見つかります。

どうでしょうか。

Issue #6643 has been updated by Glass_saga (Masaki M.).

Kouhei S. wrote:

"type mismatch: %s
given"というエラーメッセージに、「本当はIntegerかSymbolで指定して欲しかったんだよ!」みたいな情報が入っていると、間違ったオブジェクトを指定してしまった時にどうすればうまく動くようにできるかがわかりやすくなってうれしいなぁと思いました!

"%s is not an Integer or Symbol"や、"whence must be an Integer or
Symbol"が良いでしょうか。

Feature #6643: io.seek(off, :end)

Author: akr (Akira T.)
Status: Assigned
Priority: Normal
Assignee: akr (Akira T.)
Category:
Target version:

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
というふたつの例が見つかります。

どうでしょうか。

Issue #6643 has been updated by Glass_saga (Masaki M.).

File patch.diff added

IO::SEEK_XXXの値は従来のままとして、whence引数にIntegerもSymbolも受け付けるIO#seekを作ってみました。
Symbolとしては、:set, :cur, :current, :endを大文字小文字を区別せず受け付けます。

これで互換性を崩さずにSymbolも渡せるようになるので良いんじゃないかと思うのですが、いかがでしょうか。

Feature #6643: io.seek(off, :end)

Author: akr (Akira T.)
Status: Assigned
Priority: Normal
Assignee: akr (Akira T.)
Category:
Target version:

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
というふたつの例が見つかります。

どうでしょうか。

Issue #6643 has been updated by kou (Kouhei S.).

個人的には(1)間違った値と(2)間違っている理由と(3)期待する値が入ったエラーメッセージがあると直す時に嬉しいので、今ある案がまざった"whence
must be an Integer or Symbol: %s given"みたいなのがいいんじゃないかと思います!
(自分が書くときは"whence must be an Integer or Symbol:
<%s>"みたいに間違った値を「<>」とかの記号で囲んだりします。空文字列だったときにわかりづらいので。。。)

Feature #6643: io.seek(off, :end)

Author: akr (Akira T.)
Status: Assigned
Priority: Normal
Assignee: akr (Akira T.)
Category:
Target version:

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
というふたつの例が見つかります。

どうでしょうか。

Issue #6643 has been updated by Glass_saga (Masaki M.).

File patch2.diff added

Kouhei S. wrote:

個人的には(1)間違った値と(2)間違っている理由と(3)期待する値が入ったエラーメッセージがあると直す時に嬉しいので、今ある案がまざった"whence
must be an Integer or Symbol: %s given"みたいなのがいいんじゃないかと思います!

なるほど。確かにその3つの情報が入っていると直す時に嬉しいですね。
エラーメッセージを改善したpatchを添付します。
コメントにも修正を加えています。

Feature #6643: io.seek(off, :end)

Author: akr (Akira T.)
Status: Assigned
Priority: Normal
Assignee: akr (Akira T.)
Category:
Target version:

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
というふたつの例が見つかります。

どうでしょうか。

Issue #6643 has been updated by ko1 (Koichi Sasada).

Target version set to 2.0.0

田中さんに一応聞いておきたいところ.

Feature #6643: io.seek(off, :end)

Author: akr (Akira T.)
Status: Assigned
Priority: Normal
Assignee: akr (Akira T.)
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
というふたつの例が見つかります。

どうでしょうか。