From: Wakou Aoyama Date: 2003-02-18T00:56:20+09:00 Subject: [ruby-list:37119] Re: Local variables & blocks 青山です。 すでに一部まとまりつつあるようですが。 On Mon, Feb 17, 2003 at 01:33:35AM +0900, ichimal@fenix.ne.jp wrote: > これは nil と未初期化ではなく、nil と未定義の違いを示す例です。 Ruby には変数宣言が不要という特徴があり、というより、変数宣言を不要に したいという事から、代入すなわち初期化が宣言すなわち定義の代わりになっ ています。 それゆえに、未初期化と未定義は非常に密接な関係にあり、実質同等の意味を 持っている、という感じでしょう。 ま、もっとも、それが当てはまるのはローカル変数だけで、グローバル変数や インスタンス変数は初期化無しに参照可能なので、これらに関しては同等とは 言えないですね。 (というより、今回の議論はそこに関する事のようなので、ローカル変数は別 にして考えるべき? 初期化=定義であるローカル変数では、未初期化と未定 義の違いという話しにはならなそうですし。) という事で、未初期化、未定義、nil これらが混在しているなあ、という話し になるとしたら、そのあたりでしょうか? これらに関しては、確かに、 defined? でも例外捕捉でも判別不能ですし、ある意味、混乱しているとも見 られなくも無い面はあるかもしれません。 ただし、これらについても、個人的には、$foo, @foo のように、特別な記号 を付ける必要がある事から、利用者は意識して使っていると思われますし、そ れゆえに代入による宣言無しでも混乱が発生していないのでは、と感じます。 少し前に、宣言の役割のような話しもありましたが、それはつまり、人間の見 落としを処理系が発見してくれるメリット、という事であって、そもそも見落 としにくい記述が出来るならば、むしろそちらを優先すべきだろう、という話 しだったと思います。 このバランスが難しいんですけれどね。結合強度の話しなどはほぼ絶え間無く 議論が続けられていますし、ある意味、人間の感覚と、機械や理論の違いをど こまで埋められるかという事に挑戦している言語なのかもしれません。 > > undef var > > > > これは有りでしょうか? > > 変数を「未定義」化するとか「未初期化」化するのは、本質的に不可逆な概 > 念を無理矢理可逆なものとみなせと言っているようでいただけません。せめて > 「無用になった変数を明示的に廃棄」という概念を用いるべきだと思います。 > が、そのような概念はスコープやエクステントに関する規則を複雑にするだけ > だと思います。 この件に関しては、undef method が可能なものですから、ついでに書いてみ たというだけで、実は私も何かコメントが付くかな、という感じでした。 remove_const というのもありますし、まるっきり可能性が無いわけではない かなあ、と思う事もあったりしますし。 -- 青山 和光 Wakou Aoyama