[#44578] Ruby初心者が作りました — Kabu and Ruby管理人 <kabu_and_ruby@...>

http://www.geocities.jp/kabuandruby/index.html

26 messages 2008/02/06

[#44691] ”Rubyアプリケーションプログラミング”の伝言サーバの使い方 — "Yangkook Kim" <yangkookkim@...>

キムと申します。オーム社から出版されている書籍、"Rubyアプリケーションプログラミング"のP267~275に掲載されている伝言サーバー&クライアントの利用の仕方がわかりません。質問を要約すると次の2点です。1、サーバーが正常に起動されているかどうかわからない。2、書き込みクライアントで入力をサーバーに送信する方法がわからない。

8 messages 2008/02/24

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

From: ODA Kaname <oda@...>
Date: 2008-02-09 09:30:59 UTC
List: ruby-list #44599
To; 永井さん

尾田です。

On Sat, 9 Feb 2008 16:22:57 +0900
Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> 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@londobell.net>

In This Thread