[#9052] bang method returns string always — WATANABE Hirofumi <eban@...>

わたなべです.

92 messages 2000/02/01
[#9054] Re: bang method returns string always — matz@... (Yukihiro Matsumoto) 2000/02/01

まつもと ゆきひろです

[#9060] Re: bang method returns string always — WATANABE Hirofumi <eban@...> 2000/02/02

わたなべです.

[#9062] Re: bang method returns string always — matz@... (Yukihiro Matsumoto) 2000/02/02

まつもと ゆきひろです

[#9070] Re: bang method returns string always — Wakou Aoyama <wakou@...> 2000/02/03

青山です。

[#9082] Re: bang method returns string always — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/02/04

なひです.

[#9083] Re: bang method returns string always — matz@... (Yukihiro Matsumoto) 2000/02/04

まつもと ゆきひろです

[#9259] ruby object — Minero Aoki <aamine@...> 2000/02/20

あおきです。

[#9263] Re: ruby object — matz@... (Yukihiro Matsumoto) 2000/02/21

まつもと ゆきひろです

[#9264] Re: ruby object — Minero Aoki <aamine@...> 2000/02/21

あおきです。

[#9266] Re: ruby object — matz@... (Yukihiro Matsumoto) 2000/02/22

まつもと ゆきひろです

[#9084] Re: bang method returns string always — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/02/04

なひです.

[#9096] Re: bang method returns string always — Kazunori NISHI <kazunori@...> 2000/02/04

西@九大です。

[#9100] Re: bang method returns string always — matz@... (Yukihiro Matsumoto) 2000/02/04

まつもと ゆきひろです

[#9154] Re: bang method returns string always — Kazunori NISHI <kazunori@...> 2000/02/08

西@九大です。

[#9158] Re: bang method returns string always — matz@... (Yukihiro Matsumoto) 2000/02/08

まつもと ゆきひろです

[#9170] Re: bang method returns string always — Kazunori NISHI <kazunori@...> 2000/02/09

西@九大です。

[#9171] Re: bang method returns string always — matz@... (Yukihiro Matsumoto) 2000/02/09

まつもと ゆきひろです

[#9173] Re: bang method returns string always — Koji Arai <JCA02266@...> 2000/02/09

新井です。

[#9206] Re: bang method returns string always — nobu.nakada@... 2000/02/13

なかだです。

[#9207] Re: bang method returns string always — "Akinori -Aki- MUSHA" <knu@...> 2000/02/13

 knuです。

[#9208] Re: bang method returns string always — nobu.nakada@... 2000/02/13

なかだです。

[#9211] Re: bang method returns string always — matz@... (Yukihiro Matsumoto) 2000/02/13

まつもと ゆきひろです

[#9212] Re: bang method returns string always — "Akinori -Aki- MUSHA" <knu@...> 2000/02/13

 knuです。

[#9213] Re: bang method returns string always — Kazuhiro Yoshida <moriq.kazuhiro@...> 2000/02/14

もりきゅうです。ゴミまき。

[#9214] Re: bang method returns string always — gotoken@... (GOTO Kentaro) 2000/02/14

ごとけんです

[#9215] Re: bang method returns string always — WATANABE Hirofumi <Hirofumi.Watanabe@...> 2000/02/14

わたなべです.

[#9218] Re: bang method returns string always — Kazuhiro Yoshida <moriq.kazuhiro@...> 2000/02/15

もりきゅうです。

[#9219] Re: bang method returns string always — matz@... (Yukihiro Matsumoto) 2000/02/15

まつもと ゆきひろです

[#9220] Re: bang method returns string always — Kazuhiro Yoshida <moriq.kazuhiro@...> 2000/02/15

もりきゅうです。

[#9222] Re: bang method returns string always — Koji Arai <JCA02266@...> 2000/02/15

新井です。

[#9224] Re: bang method returns string always — matz@... (Yukihiro Matsumoto) 2000/02/15

まつもと ゆきひろです

[#9085] xmalloc() in Windows — "Shigeo Kobayashi" <shigeo@...>

小林です。

38 messages 2000/02/04

[#9134] Re: site_ruby — gotoken@... (GOTO Kentaro)

ごとけんです

24 messages 2000/02/07
[#9135] Re: site_ruby — WATANABE Hirofumi <Hirofumi.Watanabe@...> 2000/02/07

わたなべです.

[#9143] Re: site_ruby — nobu.nakada@... 2000/02/07

なかだです。

[#9161] Re: site_ruby — gotoken@... (GOTO Kentaro) 2000/02/08

In message "[ruby-dev:9143] Re: site_ruby"

[#9290] [fix] String#* with huge string — EGUCHI Osamu <eguchi@...>

えぐち@エスアンドイー です。

17 messages 2000/02/26
[#9293] Re: [fix] String#* with huge string — matz@... (Yukihiro Matsumoto) 2000/02/26

まつもと ゆきひろです

[#9294] Re: [fix] String#* with huge string — EGUCHI Osamu <eguchi@...> 2000/02/27

えぐち@エスアンドイー です。

[#9297] GC Problem ? — "Shigeo Kobayashi" <shigeo@...>

小林です。

23 messages 2000/02/27

[ruby-dev:9070] Re: bang method returns string always

From: Wakou Aoyama <wakou@...>
Date: 2000-02-03 21:46:47 UTC
List: ruby-dev #9070
青山です。

On Thu, 3 Feb 2000 00:50:58 +0900,
matz@netlab.co.jp (Yukihiro Matsumoto) wrote:

>   (1) tr!などは変化しないときnilを返すように戻す
>   (2) 変化の有無が知りたいときはno bang methodを使い、
>       original と比較する

(3) tr! などには(も)引数を増やして、nil (または、例外?)を返すようにも
    できるようにする。s.tr!("abc", "ABC", true) とか。

元の文字列との比較というのは、場合によっては結構重くなりませんか?
そうで無いのならかまいませんが、重くなる可能性があるのならば、比較無し
に変化の有無を知る方法も欲しいです。


とりあえず shellwords.rb は、こんな感じでしょうか。パッチの方が長くなっ
てしまうので、そのまま。ArgError --> ArgumentError の修正と、Array#+=
--> Array#push, String#+= --> String#concat による高速化、そして、引数が
nil, false だった場合に '' を返していたのを、型チェックに変更して、
String 以外の場合は例外としてみました。

# shellwords.rb
# original is shellwords.pl
#
# Usage:
#       require 'shellwords'
#       words = Shellwords.shellwords(line)
#
#	   or
#
#       require 'shellwords'
#       include Shellwords
#       words = shellwords(line)

module Shellwords
  def shellwords(line)
    unless line.kind_of?(String)
      raise ArgumentError, "Argument must be String class object."
    end
    line.sub!(/^\s+/, '')
    words = []
    while line != ''
      field = ''
      while true
	if line.sub!(/^"(([^"\\]|\\.)*)"/, '') && $& then #"
	  snippet = $1
	  snippet.gsub!(/\\(.)/, '\1')
	elsif line =~ /^"/ then #"
	  raise ArgumentError, "Unmatched double quote: #{line}"
        elsif line.sub!(/^'(([^'\\]|\\.)*)'/, '') && $& then #'
	  snippet = $1
	  snippet.gsub!(/\\(.)/, '\1')
	elsif line =~ /^'/ then #'
	  raise ArgumentError, "Unmatched single quote: #{line}"
	elsif line.sub!(/^\\(.)/, '') && $& then
	  snippet = $1
	elsif line.sub!(/^([^\s\\'"]+)/, '') && $& then #'
	  snippet = $1
	else
	  line.sub!(/^\s+/, '')
	  break
	end
	field.concat(snippet)
      end
      words.push(field)
    end
    words
  end
  module_function :shellwords
end


-- 
青山 和光 Wakou Aoyama <wakou@fsinet.or.jp>

In This Thread