2008年2月 9日

[ruby-list:44599] Re: Ruby初心者が作りました

To; 永井さん

尾田です。

On Sat, 9 Feb 2008 16:22:57 +0900
Hidetoshi NAGAI <nagai@xxxxx> wrote:

> スクリプトの実行は,スクリプト全体を読み込んで

> 構文を解析した後に行われます.
> SJIS では漢字 1 文字を構成する 2 バイトの内の 2 バイト目が
> '\' の文字コードと一致してしまう可能性があります.
>
> 例えば "表" という漢字がそうですので,
> スクリプト中に title = "価格表" などとあった場合,
> 漢字を正しく処理しない限りは title = ".....\" という形になって
> 本来の文字列末尾のダブルクォートがエスケープされてしまい,
> 結果としてシンタックスエラーになるはずです.
>
> だからこそ,るびきちさんが
>
> > > なぜなら、Rubyインタプリタがスクリプトを読む時点でスクリプトの文字コードが
> > > Shift_JISであることを認識する必要があるからです。
>
> と書いていたわけです.
まず始めにコード全体を読んでから評価するという順番自体を失
念していました。
なるほどなるほど、コード全体が読まれる前に挿入されていない
とマズいというのはそいうことなのですね。ありがとうございま
す、得心がいきました。

> ただ,この shebang での記述 (#! ruby -Ks) は
> require されるスクリプト/ライブラリ側に書いていても機能しません.
> ですので,require を実行する親スクリプト側で
> -Ks あるいは $KCODE='s' の状態にしておく必要があります.
上記の問題を考慮すると自明の理ということですね。理解しました。

> # Ruby 1.9 では日本語周りの対応方法が全く違ってきますので,
> # ご注意ください.
>
> もちろん「このライブラリを使うときは $KCODE='s' にしてください」
> とする選択肢もありますが,それを忘れてもシンタックスエラーにだけは
> ならないように工夫することも不可能ではありません.
> 例えば
>
> ----< hogelib.rb >-------------------------------------
> orig_kcode = $KCODE
> $KCODE = 's'
> require 'hogelib-sjis'
> $KCODE = orig_kcode
> -------------------------------------------------------
>
> として,SJIS を含む部分はすべて hogelib-sjis.rb に書くという方法
> (もちろん利用の際は require 'hogelib' とする) があります.
>
> # 同じ手は,日本語を含まないメインスクリプトと
> # 日本語を含むスクリプトとで分割構成する形でも使えますよね.
>
> 上の例はオリジナルの $KCODE を保持するように書いてはいますが,
> スクリプトがマルチスレッドで動くように書かれている場合には
> 安全な形になっていませんから気をつけてください.
大変参考になります。

> まぁとにかく,日本語文字列として解釈をしなければならない時点に
> どの漢字コードの文字列を扱おうとしているかを
> Ruby が適切に知っていさえすればいいわけです.
> その視点で見さえすれば,うまくコントロールできるだろうと思います.
良くわかりました、どうもありがとうございました。

--
ODA Kaname <oda@xxxxx>

投稿者 xml-rpc : 2008年2月 9日 18:30
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/69621
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。