Feature #1159
closed
StringScanner に文字ベースでのインデックスを返すメソッドがほしい
Added by matsuda (Akira Matsuda) almost 16 years ago.
Updated over 13 years ago.
Description
=begin
松田と申します。
Ruby 1.9の StringScanner#pos (pointer) が現在はバイト単位
でのインデックスを返してくれるのですが、
文字列ベースでのインデックスを返すメソッドが欲しい、
または、posが文字列ベースでのインデックスを返すように
変更して欲しいです。
=end
=begin
成瀬です。
Akira Matsuda wrote:
Feature #1159: StringScanner に文字ベースでのインデックスを返すメソッドがほしい
http://redmine.ruby-lang.org/issues/show/1159
起票者: Akira Matsuda
ステータス: Open, 優先度: Normal
カテゴリ: core
松田と申します。
Ruby 1.9の StringScanner#pos (pointer) が現在はバイト単位
でのインデックスを返してくれるのですが、
文字列ベースでのインデックスを返すメソッドが欲しい、
または、posが文字列ベースでのインデックスを返すように
変更して欲しいです。
StringScanner#pos の文字位置への変更は IO#pos との絡みで難しく、
また、StringScanner#pos= や IO#pos= を使った後で文字インデックスを
再算出しないといけないので、なかなか難しいように感じます。
--
NARUSE, Yui naruse@airemix.jp
=end
=begin
松田です。
On 2009/02/14, at 21:22, NARUSE, Yui wrote:
StringScanner#pos の文字位置への変更は IO#pos との絡
みで難しく、
また、StringScanner#pos= や IO#pos= を使った後
で文字インデックスを
再算出しないといけないので、なかなか難しいように感じます。
なるほど。実装上難しいのですね。
IOとの絡みというところもなかださんからも伺いました。
だったら仕方がないのかもしれません。
ただ、利用者の側から見ると、正規表現で文字列っぽく
scanさせるくせにインデックスはバイトかよ、とか、
Stringを扱うのにString#[] と数えかたが違う点とか、
そういう違和感はやっぱりあるような気がします。
--
Akira Matsudaronnie@dio.jp
=end
=begin
なかだです。
At Sun, 15 Feb 2009 01:55:49 +0900,
松田 明 wrote in [ruby-dev:38012]:
StringScanner#pos の文字位置への変更は IO#pos との絡
みで難しく、
また、StringScanner#pos= や IO#pos= を使った後
で文字インデックスを
再算出しないといけないので、なかなか難しいように感じます。
なるほど。実装上難しいのですね。
IOとの絡みというところもなかださんからも伺いました。
だったら仕方がないのかもしれません。
実装上難しいというより、
ss = StringScanner.new("あ")
ss.get_byte
ss.pos
の戻り値を定義できない限りどこかに矛盾を生じると思います。
ただ、利用者の側から見ると、正規表現で文字列っぽく
scanさせるくせにインデックスはバイトかよ、とか、
Stringを扱うのにString#[] と数えかたが違う点とか、
そういう違和感はやっぱりあるような気がします。
むしろ、StringScannerを使っているのにインデックスを使っているこ
とのほうが、コードのまずさを示しているような気がします。
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦
=end
=begin
成瀬です。
松田 明 wrote:
On 2009/02/14, at 21:22, NARUSE, Yui wrote:
StringScanner#pos の文字位置への変更は IO#pos との絡みで難しく、
また、StringScanner#pos= や IO#pos= を使った後で文字インデックスを
再算出しないといけないので、なかなか難しいように感じます。
なるほど。実装上難しいのですね。
IOとの絡みというところもなかださんからも伺いました。
だったら仕方がないのかもしれません。
つまるところ、pos とかは IO の概念を踏襲しています。
ただ、利用者の側から見ると、正規表現で文字列っぽく
scanさせるくせにインデックスはバイトかよ、とか、
インデックスって pos のことですよね。
なんで pos を扱う必要があるのかがそもそもいまいちわからなかったりはします。
エラー位置の表示とか?
Stringを扱うのにString#[] と数えかたが違う点とか、
String#[] でなく MatchData#[] を連想するべきでしょう。
そういう違和感はやっぱりあるような気がします。
StringScanner の全メソッドを把握してから考え直すと、その違和感は減ってきませんかね。
るりまでの記述がそのへん足りていない気はするので、そこを書いてみつつ、
修正案をまとめてみるのもよいのではないでしょうか。
--
NARUSE, Yui naruse@airemix.jp
=end
- Category changed from core to ext
- Status changed from Open to Feedback
- Priority changed from Normal to 3
- Assignee set to aamine (Minero Aoki)
- Status changed from Feedback to Rejected
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0