[#5219] ruby for perl users — Noritsugu Nakamura <nnakamur@...>

35 messages 1997/11/09
[#5220] Re: ruby for perl users — tateishi@... (Tateishi Takaaki) 1997/11/09

立石です。

[#5224] Re: ruby for perl users — shugo@... (Shugo Maeda) 1997/11/09

前田です。

[#5243] read from subprocess — Kikutani Makoto <kikutani@...>

きくたにです。

17 messages 1997/11/10
[#5250] Re: read from subprocess — matz@... (Yukihiro Matsumoto) 1997/11/11

まつもと ゆきひろです

[#5300] Win32用の Rubyでの tkの使用 — Tomoaki Takebayashi <tota@...>

はじめまして、竹林といいます。

14 messages 1997/11/15
[#5302] Re: Win32用の Rubyでの tkの使用 — WATANABE Hirofumi <eban@...> 1997/11/15

わたなべです.

[#5303] Re: Win32 用の Rubyでの tkの使用 — Tomoaki Takebayashi <tota@...> 1997/11/15

[#5305] Re: Win32 用の Ruby での tk の使用 — aito@...5sun.yz.yamagata-u.ac.jp 1997/11/17

あ伊藤です.

[#5320] ruby 1.0-971118 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

20 messages 1997/11/18
[#5337] Re: ruby 1.0-971118 released — WATANABE Hirofumi <watanabe@...> 1997/11/19

わたなべです.

[#5340] Re: ruby 1.0-971118 released — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#5398] 配列への追加について — a-nisida@... (西田明良)

はじめまして、西田@初心者 と申します。m(..)m

16 messages 1997/11/22

[ruby-list:5285] Re: sub

From: matz@... (Yukihiro Matsumoto)
Date: 1997-11-13 09:03:38 UTC
List: ruby-list #5285
まつもと ゆきひろです

In message "[ruby-list:5284] sub"
    on 97/11/13, "Motoyuki S." <moto@cc.tohoku.ac.jp> writes:

|もと@大計といいます.

|で,今日は sub & sub! について質問(というか,確認かな)に来ました.

まず,第一にsub/sub!の動作はこれで正常です.またそれらに対す
る理解も正しいと思います.で,問題は「sub!で予想外の文字列が
変更されるのがいや」という点ですね.特に,subが置換が発生し
なかった場合にもとの文字列を返す点が気になっていると理解しま
した.

結論から言うと「この仕様を変更する予定はありません」.

subの仕様は「置換が行われた文字列を返す」というものです.置
換がまったく起きなかった場合に元の文字列を返すのは効率のため
です.問題はsub!が共有されている可能性のある文字列を問答無用
で書き換えてしまうことにあります.よりややこしい例をあげましょ
う.

  foo = "foo"
  print foo.sub!("f", "b"), foo, "\n"
  => booboo   # boofooではない

このような問題があるのでsub!のような「破壊的な」メソッドには!
のついた普通でない名前がついているわけです.迷うようならsub
を使いましょう.

|sub でパターンにマッチしないと,ポインタ(っていうのかな.C でいうポインタ)
|が戻り値になるためだと思うのですが,こういうものなのでしょうか.

こういうものです.

|感覚的には,パターンにマッチしなかった場合も b = a.dup のようになって
|欲しいのです.
|#あらかじめ b = a.dup しておくのが正しい書き方なのかもしれませんが.

sub!を使わないのが正しい書き方だと思います.

|世間のスクリプト言語がどのようになっているかわからないのですが,「こういう
|仕様のほうが僕の場合は感覚的に合うなぁ」というお話でした.

Perlとかでは代入によって文字列のコピーが発生するのでこのよう
な問題は起きませんし,Pythonでは文字列はimmutable(書き換えが
起きない)なので文字列に関してはこのような問題が起きません.
が,配列やオブジェクトについては類似の問題が発生します.

                                まつもと ゆきひろ /:|)

In This Thread