こんばんは,久野です。お返事ありがとうございます。

on Mon, 26 Feb 2001 02:27:16 +0900
in [ruby-list:28278] Re: [Q] jcode の局部適用
   <983119922.875498.8619.nullmailer / ev.netlab.zetabits.com>
matz / zetabits.com (Yukihiro Matsumoto) wrote:

> |表題の通りの質問ですが,jcode.rbの機能を局部的に適用すること
> |はできるでしょうか。文字列処理を一時的に日本語に対応させ,そ
> |の前後では日本語を意識しない処理を行ないたい(ことだって長い
> |人生にはあるかも知れない)のです。
> 
> 現状ではできません。jcodeはproof-of-concept程度のもので、そ
> んなにレベルの高い実装ではありませんので。開発中のM17N Ruby
> ではjcodeは不要になりますし、文字列単位でエンコーディングが
> 指定できます。これもまた完成度は低いのですが、長い人生が終わ
> るまでにはなんとかしたいと思ってます。

分かりました。

しかし,以下のようなスクリプトで実験をしているうちに,疑問が
幾つか出てきました。

#!/usr/local/bin/ruby -Ke

s1 = "松本"
s2 = "硝"

Original_String = String.clone

require "jcode"
  puts s1.delete s2  # 日本語を意識した処理

s3 = Original_String.new("松本")

String = Original_String
  puts s1.delete s2  # 日本語を意識した処理

  puts s3.delete s2  # デフォルトの処理

s4 = String.new("松本")
  puts s4.delete s2  # デフォルトの処理

s5 = "松本"
  puts s5.delete s2  # 日本語を意識した処理

__END__

(1) jcodeでStringクラスの動作を変更すると,それ以前に作成し
    たStringクラスのインスタンスにも影響が及ぶのに,
      String = Original_String
    とすると,それ以降の String#new にしか影響が及ばないのは
    なぜ?

(2) String#new("") と "" はどちらもStringクラスのインスタン
    スを返すはずなのに,s4とs5の結果が異なるのはなぜ?

ご解説いただければ嬉しく思います。

------------------------------
久野 宏三 (HISANO Kozo)
mailto:mail / seventhree.com
------------------------------