From: matz@... (Yukihiro Matsumoto) Date: 1996-12-27T17:00:30+09:00 Subject: [ruby-list:1545] Re: C++ ¥桼¥¶¤Î ¤¿¤á¤μê°ú (Ver. 0.1.1) まつもと ゆきひろです. In message "[ruby-list:1533] Re: C++ ユーザのための手引 (Ver. 0.1.1)" on 96/12/27, Shin-ichiro Hara writes: | |原です。 |この言葉は全く正しいのですが(作者の言葉なんだから当たり前 |だ^^;)、ちょっと読むと、前半で「値渡ししかなく」と言いなが |ら後半「参照が渡る」と反対の事を言っている様にみえて、かな |り難しいですね。 あー,そうかぁ.私自身はC++を使っていてもスタック上にオブジェ クトを置くことは全くないので,違和感を感じませんでした.C++ 通の人はこういうのをどういうのですか? 値呼び? 参照呼び? 名前呼び? 私の知識によるとrubyの引数の渡し方はどう考えても値呼びなんで すけど(参照呼びというと渡した*変数*の値が変わるように感じる), C++使いは違った印象を持つんでしょうか? |> rubyには値渡ししかなく引き数として与えられた変 |> 数の値を変えても元の式の値は変わりません. 変数の値とオブジェクトの状態を区別して頂くしかないでしょうね. 特に配列や連想配列のようなコンテナ系のオブジェクトは誤解を生 みやすいのでしょうか. |「破壊的な操作」の定義も難しいですよね。私も最初は何が破壊 |的で何が破壊的でないのか区別がつきにくかった。 オブジェクトの状態(コンテナの内容も含めて)を変更するものはみ な破壊的です.ですから, |例えば上の foo(a) は、配列 a に対して破壊的な作用をしてい |るのですが、b[0] = "B" は破壊的な操作ではないですよね。し |いていえば、 b[0] = "B" は破壊的な操作です.bから(aからも)参照されている 配列の内容を破壊的に変更しています. |結局、オブジェクトとオブジェクトの参照の区別をきちんとつけた |上で、 | |(1)Fixnum 以外のクラスのオブジェクトを変数に代入するとき、 | 代入されるのは、その参照である。 |(2)オブジェクトの参照でなくオブジェクトそのものを変更する | ことを破壊的な操作と呼ぶ | |という感じで説明するしかないのでしょうかね。難しいなあ。習う |より馴れろ、とか言いたくないなあ。(^^; そんなに難しいですか? うーん,この辺が私の説明がわかりにく いといわれる原因かなあ. まつもと ゆきひろ /:|)