Feature #1159
closedStringScanner に文字ベースでのインデックスを返すメソッドがほしい
Description
=begin
松田と申します。
Ruby 1.9の StringScanner#pos (pointer) が現在はバイト単位
でのインデックスを返してくれるのですが、
文字列ベースでのインデックスを返すメソッドが欲しい、
または、posが文字列ベースでのインデックスを返すように
変更して欲しいです。
=end
Updated by naruse (Yui NARUSE) almost 16 years ago
=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
Updated by matsuda (Akira Matsuda) almost 16 years ago
=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
Updated by nobu (Nobuyoshi Nakada) almost 16 years ago
=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
Updated by naruse (Yui NARUSE) almost 16 years ago
=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
Updated by naruse (Yui NARUSE) over 15 years ago
- Category changed from core to ext
- Status changed from Open to Feedback
- Priority changed from Normal to 3
=begin
=end
Updated by marcandre (Marc-Andre Lafortune) about 15 years ago
- Assignee set to aamine (Minero Aoki)
=begin
=end
Updated by naruse (Yui NARUSE) about 15 years ago
- Status changed from Feedback to Rejected
=begin
=end