[Gauche-devel-jp] Re: hash table and scope

Back to archive index

yamada yamad****@tir*****
2004年 9月 17日 (金) 15:44:47 JST


山田です。

# 自分でも分かりそうな問題が出てきたので…‥

先に結論から。

>  (値渡しだから、初めの lambda に渡された tbl と
>   その tbl への変更はその lambda の中でだけ有効、との理解。)

値渡しではなく、リファレンス渡しになっていると思います。
(schemeみたいな関数指向?言語では、基本的に、値渡しをする事は無い?
  数値や文字列も、値渡しではなくリファレンス渡しを
  しているように思えますし)

> (define tbl (make-hash-table))

make-hash-tableで作られた、無名のハッシュ「を指すポインタ」を、
tblという名前の変数に束縛しています。
なので、

> ((lambda (tbl key value)
>    (hash-table-push! tbl key value))
>  tbl 1 "a")
> ((lambda (key value)
>    (hash-table-push! tbl key value))
>  2 "b")

ここでtblとして渡されるのは、上記の、無名のハッシュを指すポインタなので、
それに対して行われる操作は、最初に作った、一つの無名ハッシュを
操作している、という事になると思います。

それでは、どうかよろしくお願い致します。



Gauche-devel-jp メーリングリストの案内
Back to archive index