青山です。

On Thu, 4 Nov 1999 17:26:47 +0900,
Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> wrote:

> 参照渡しというのは、C++ での
> 
>   void foo(int &n) {
>     n = 1;
>   }
>   main() {
>     int n = 0;
>     foo(n); // n=>1
>   }

なるほど。C++ って、強引にアドレス(参照)を引き出して持って来られるので
すね。しかし、n を渡していると、やはり値渡しの参照引き出されというか、
なんか違和感がありますね。

> みたいのを言うんじゃないかしら。参照の値渡しは
> 
>   void foo(int *p) {
>     *p = 1;
>   }
>   main() {
>     int n = 0;
>     foo(&n); // n=>1
>   }
> 
> ですかね。

暗黙の内に引き出されるのではなく、明示的に渡しているという差だけで、こ
ちらも同じく値の参照渡しかと。

> では、参照の参照渡しというのは、、、もういいか。(^^;

int *n = 0;
foo(n);

言葉の定義によるかもしれませんが、参照の参照渡しを上のようだとすると、
その他、参照の値渡し、

int *n = 0;
foo(*n);

で、値の値渡し、

int n = 0;
foo(n);

という感じになるような気がします。

で、Ruby はどれかというと、オブジェクト(値)の名札(参照)渡しですから、
先の原さんの例の両方が相当すると思います。

ただ、C++ の参照は、まさに参照で、アドレス演算子では無いという事ですか
ら、その点では C++ の例の方が確かに近いですね。


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