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

Posted by akr (Akira Tanaka) (Guest)
on 2012-06-25 12:32
(Received via mailing list)
Issue #6643 has been reported by akr (Akira Tanaka).

----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643

Author: akr (Akira Tanaka)
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-develo...
というふたつの例が見つかります。

どうでしょうか。
Posted by KOSAKI Motohiro (Guest)
on 2012-06-25 16:18
(Received via mailing list)
(6/25/12 6:32 AM), akr (Akira Tanaka) wrote:
> Assignee:
> とかけるようにする、ということです。
>
> IO::SEEK_END と等価な指定として :end,
> IO::SEEK_CUR と等価な指定として :cur,
> IO::SEEK_SET と等価な指定として :set を

+1.
というかIOまわりの定数は全部シンボルで指定したいぐらい。。
Posted by SASADA Koichi (Guest)
on 2012-06-25 16:31
(Received via mailing list)
(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 になるんでしょうか(なっちゃいけ
ない理由はあるんかな).
Posted by SATOH Fumiyasu (Guest)
on 2012-06-25 16:38
(Received via mailing list)
At Mon, 25 Jun 2012 19:32:06 +0900,
akr (Akira Tanaka) 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
Posted by Tanaka Akira (Guest)
on 2012-06-25 21:53
(Received via mailing list)
2012$BG/(B6$B7n(B25$BF|(B 23:31 SASADA Koichi <ko1@atdot.net>:

> $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
Posted by Tanaka Akira (Guest)
on 2012-06-25 22:11
(Received via mailing list)
2012$BG/(B6$B7n(B25$BF|(B 23:37 SATOH Fumiyasu <fumiyas@osstech.jp>:

>> 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
Posted by Kouhei Sutou (Guest)
on 2012-06-26 15:01
(Received via mailing list)
$B?\F#$G$9!#(B

In <CANjopZHFG3ZQ+VA_dJPCAxn8UnQ6FqqfyfOyxLy536tkwqaWbA@mail.gmail.com>
  "[ruby-dev:45843] Re: [ruby-trunk - Feature #6643][Open] io.seek(off, 
:end)" on Tue, 26 Jun 2012 05:10:47 +0900,
  Tanaka Akira <akr@fsij.org> 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
Posted by Kazuhiro NISHIYAMA (Guest)
on 2012-06-26 15:56
(Received via mailing list)
$B@>;3OB9-$G$9!#(B

At Tue, 26 Jun 2012 05:10:47 +0900,
Tanaka Akira 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?
Posted by Tanaka Akira (Guest)
on 2012-06-27 02:18
(Received via mailing list)
2012$BG/(B6$B7n(B26$BF|(B 22:56 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>:

> $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
Posted by KOSAKI Motohiro (Guest)
on 2012-06-27 20:51
(Received via mailing list)
> $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?

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
Posted by U.Nakamura (Guest)
on 2012-06-28 02:53
(Received via mailing list)
$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, <kosaki.motohiro@gmail.com> 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
Posted by Kazuhiro NISHIYAMA (Guest)
on 2012-06-28 05:26
(Received via mailing list)
> > $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
Posted by ko1 (Koichi Sasada) (Guest)
on 2012-07-14 11:50
(Received via mailing list)
Issue #6643 has been updated by ko1 (Koichi Sasada).

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


----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643#change-28115

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

どうでしょうか。
Posted by Glass_saga (Masaki Matsushita) (Guest)
on 2012-10-16 13:47
(Received via mailing list)
Issue #6643 has been updated by Glass_saga (Masaki Matsushita).


こんにちは。

(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)
https://bugs.ruby-lang.org/issues/6643#change-30882

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

どうでしょうか。
Posted by Glass_saga (Masaki Matsushita) (Guest)
on 2012-10-16 14:37
(Received via mailing list)
Issue #6643 has been updated by Glass_saga (Masaki Matsushita).

File patch.diff added

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

これで互換性を崩さずにSymbolも渡せるようになるので良いんじゃないかと思うのですが、いかがでしょうか。
----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643#change-30883

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

どうでしょうか。
Posted by kou (Kouhei Sutou) (Guest)
on 2012-10-16 14:49
(Received via mailing list)
Issue #6643 has been updated by kou (Kouhei Sutou).


"type mismatch: %s 
given"というエラーメッセージに、「本当はIntegerかSymbolで指定して欲しかったんだよ!」みたいな情報が入っていると、間違ったオブジェクトを指定してしまった時にどうすればうまく動くようにできるかがわかりやすくなってうれしいなぁと思いました!
----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643#change-30884

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

どうでしょうか。
Posted by Glass_saga (Masaki Matsushita) (Guest)
on 2012-10-17 01:53
(Received via mailing list)
Issue #6643 has been updated by Glass_saga (Masaki Matsushita).


Kouhei Sutou 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)
https://bugs.ruby-lang.org/issues/6643#change-30908

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

どうでしょうか。
Posted by kou (Kouhei Sutou) (Guest)
on 2012-10-17 14:56
(Received via mailing list)
Issue #6643 has been updated by kou (Kouhei Sutou).


個人的には(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)
https://bugs.ruby-lang.org/issues/6643#change-30948

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

どうでしょうか。
Posted by Glass_saga (Masaki Matsushita) (Guest)
on 2012-10-22 04:09
(Received via mailing list)
Issue #6643 has been updated by Glass_saga (Masaki Matsushita).

File patch2.diff added

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

なるほど。確かにその3つの情報が入っていると直す時に嬉しいですね。
エラーメッセージを改善したpatchを添付します。
コメントにも修正を加えています。
----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643#change-31156

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

どうでしょうか。
Posted by kou (Kouhei Sutou) (Guest)
on 2012-10-23 14:04
(Received via mailing list)
Issue #6643 has been updated by kou (Kouhei Sutou).


ありがとうございます!

反対している人はいないので、コミットしていいんじゃないかなぁと思います。
----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643#change-31443

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

どうでしょうか。
Posted by ko1 (Koichi Sasada) (Guest)
on 2012-10-30 00:48
(Received via mailing list)
Issue #6643 has been updated by ko1 (Koichi Sasada).

Target version set to 2.0.0

田中さんに一応聞いておきたいところ.
----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643#change-31946

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

どうでしょうか。
Posted by Tanaka Akira (Guest)
on 2012-10-30 05:31
(Received via mailing list)
2012$BG/(B10$B7n(B30$BF|(B 8:47 ko1 (Koichi Sasada) 
<redmine@ruby-lang.org>:
>
> Issue #6643 has been updated by ko1 (Koichi Sasada).
>
> Target version set to 2.0.0
>
> $BEDCf$5$s$K0l1~J9$$$F$*$-$?$$$H$3$m!%(B

$B:G?7$N%Q%C%A$O3NG'$7$F$$$J$$$N$G$9$,!"(B
IO::SEEK_* $B$NCM$r%7%s%\%k$KJQ$($F$7$^$&$N$O$I$&$J$N$+$J$!!#(B

StringIO $B$O=$@5$9$l$P:Q$`$o$1$G$9$,!"(B
StringIO $B0J30$K$b$@$l$+B>$N?M$,(B IO 
$B$b$I$-$r:n$C$F$$$k2DG=@-$O$"$C$F!"(B
$B$=$&$$$&$b$N$KBP$9$kHs8_49@-$K$J$j$^$9$h$M$'!#(B

IO::SEEK_* $B$rJQ$($k$H(B io.seek(IO::SEEK_END) 
$B$H=q$$$F$b<:GT$K$J$k$H$$$&(B
$BMxE@$O$"$k$N$G$9$,!"7c$7$$$J$!!#(B
Posted by Glass_saga (Masaki Matsushita) (Guest)
on 2012-10-31 14:23
(Received via mailing list)
Issue #6643 has been updated by Glass_saga (Masaki Matsushita).


Akira Tanaka wrote:
> StringIO は修正すれば済むわけですが、
> StringIO 以外にもだれか他の人が IO もどきを作っている可能性はあって、
> そういうものに対する非互換性になりますよねぇ。

そうですね。
最新のパッチ(patch2.diff)では、そういう懸念があるのでIO::SEEK_*の値は変えずにIntegerもSymbolも受け付けるようにしています。
----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643#change-32113

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

どうでしょうか。
Posted by Glass_saga (Masaki Matsushita) (Guest)
on 2012-11-04 03:14
(Received via mailing list)
Issue #6643 has been updated by Glass_saga (Masaki Matsushita).


patch2.diff(IO::SEEK_*の値は変えないで、新たにSymbolも大文字小文字を無視して受け付けるようにしたpatch)をコミットしたいのですが、反対はありませんか?
しばらく待って反対がなければ、入れてしまおうと思います。
----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643#change-32323

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

どうでしょうか。
Posted by Tanaka Akira (Guest)
on 2012-11-06 11:55
(Received via mailing list)
2012$BG/(B10$B7n(B31$BF|(B 22:23 Glass_saga (Masaki Matsushita) 
<glass.saga@gmail.com>:
>
> Issue #6643 has been updated by Glass_saga (Masaki Matsushita).

> $B$=$&$G$9$M!#(B
> 
$B:G?7$N%Q%C%A(B(patch2.diff)$B$G$O!"$=$&$$$&7|G0$,$"$k$N$G(BIO::SEEK_*$B$NCM$OJQ$($:$K(BInteger$B$b(BSymbol$B$b<u$1IU$1$k$h$&$K$7$F$$$^$9!#(B

$B$9$$$^$;$s!#<:Ni$7$^$7$?!#(B
(redmine $B$,Mn$A$F$$$k$H$-$K%a!<%k$r=q$/$N$G$O$J$+$C$?(B...)

$B%Q%C%A$r8+$F;W$C$?$N$G$9$,!"(B:eNd $B$H$+$^$G<u$1IU$1$F$$$k$N$O!"(B
$B<u$1IU$1$9$.$G$O$J$$$+$J$!!"$H$$$&5$$,$7$^$9!#(B

% ./ruby -ve 'open("NEWS") {|f| f.seek(0, :eNd); p f.pos }'
ruby 2.0.0dev (2012-11-06 trunk 37493) [x86_64-linux]
10175

$B$^$?!"%(%i!<%a%C%;!<%8$K=P$F$/$k$N$O!">.J8;z$KJQ49$7$?8e$N$b$N$K(B
$B$J$C$F$$$^$9$,!"$3$l$O%(%i!<%a%C%;!<%8$H$7$F@53N$G$O$J$$$J$!!"$H;W$$$^$7$?!#(B

% ./ruby -ve 'open("NEWS") {|f| f.seek(0, :FOO); p f.pos }'
ruby 2.0.0dev (2012-11-06 trunk 37493) [x86_64-linux]
-e:1:in `seek': unknown whence: foo (ArgumentError)
  from -e:1:in `block in <main>'
  from -e:1:in `open'
  from -e:1:in `<main>'
zsh: exit 1     ./ruby -ve 'open("NEWS") {|f| f.seek(0, :FOO); p f.pos 
}'
Posted by Glass_saga (Masaki Matsushita) (Guest)
on 2012-11-11 15:15
(Received via mailing list)
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-develo...
というふたつの例が見つかります。

どうでしょうか。
Posted by knu (Akinori MUSHA) (Guest)
on 2012-11-11 17:23
(Received via mailing list)
Issue #6643 has been updated by knu (Akinori MUSHA).


今さらですが、すべて大文字のシンボルだけサポートすればいいのではないでしょうか。
seekのラッパーとか、IOライクなクラスの実装とかで揺れの許容が期待されるのは重荷になると思います。
こうしたコンベンションを他のメソッドにおける定数にも拡大していくことを考えるとなおさらです。

「Unix/Cの定数マクロをシンボル化する際は、大文字のまま。自明な場合は共通のプレフィックスを除く」というシンプルなルールに沿えば、trapにおけるシグナル名の扱いとも整合しますし、毎度:cur→:currentみたいな略語の展開など余計なことを考えなくて済みます。

----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643#change-32781

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

どうでしょうか。
Posted by Glass_saga (Masaki Matsushita) (Guest)
on 2012-11-12 03:39
(Received via mailing list)
Issue #6643 has been updated by Glass_saga (Masaki Matsushita).


> 「Unix/Cの定数マクロをシンボル化する際は、大文字のまま。自明な場合は共通のプレフィックスを除く」というシンプルなルール

IO#adviseはこのルールに沿っていませんね。
例えばPOSIX_FADV_NORMALに対応するRubyのシンボルは:normalです。

一方BasicSocket#setsockoptはこのルールに従っていて、例えばSO_REUSEADDRに対応するシンボルは:REUSEADDRです。

ルールを決めて統一してしまった方が良いのかも知れません。
----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643#change-32797

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

どうでしょうか。
Posted by mame (Yusuke Endoh) (Guest)
on 2012-11-24 02:44
(Received via mailing list)
Issue #6643 has been updated by mame (Yusuke Endoh).

Target version changed from 2.0.0 to next minor


----------------------------------------
Feature #6643: io.seek(off, :end)
https://bugs.ruby-lang.org/issues/6643#change-33713

Author: akr (Akira Tanaka)
Status: Assigned
Priority: Normal
Assignee: akr (Akira Tanaka)
Category:
Target version: next minor


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

どうでしょうか。
Posted by Tanaka Akira (Guest)
on 2013-04-03 19:33
(Received via mailing list)
2012$BG/(B11$B7n(B24$BF|(B 10:35 mame (Yusuke Endoh) <mame@tsg.ne.jp>:

> Feature #6643: io.seek(off, :end)
> https://bugs.ruby-lang.org/issues/6643#change-33713

> 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

$B5DO@$rFI$_D>$7$?$N$G$9$,!"7k6I!"$3$l$+$i0U8+$,$^$H$^$k$-$O$7$J$$$N$G!"(B
$B:G>.8B$N$b$N$rF~$l$h$&$H$$$&$3$H$G!"(BC 
$B%W%m%0%i%^$K$o$+$j$d$9$$$H$$$&M}M3$G!"(B
C $B$HF1$8BgJ8;z$G(B :CUR, :END, :SET 
$B$@$1<u$1IU$1$k$H$7$FF~$l$^$7$?!#(B
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.