From: nobuyoshi nakada Date: 2005-10-18T17:58:28+09:00 Subject: [ruby-dev:27437] Re: selector namespace なかだです。 At Tue, 18 Oct 2005 17:25:52 +0900, Shin-ichiro HARA wrote in [ruby-dev:27436]: > >> >> a) 見える。zot(1)は bar$zot -> global$zot の順、zot(2)は > >> >> baz$zot -> bar$zot -> global$zot の順で探す > >> >> > >> >> b) 見えない。zot(1)は global$zot だけ、zot(2)は baz$zot -> > >> >> global$zot の順で探す > >> >> > >> >> c) スコープでusingが現れると外側のusingは見えなくなる。zot(1)は > >> >> bar$zot -> global$zot の順、zot(2)は baz$zot -> global$zot > >> >> の順で探す > >> > >> >aが便利そうですね。 > >> > >> using が module ... end ぶち抜きで効果を持つのが、若干違和感があるなあ。 > > > >b案のほうがよさそうということですか。 > > そうです。既存のスコープの概念とあまりにかけ離れるのはどうかと。 既存のものでも、定数はclass/moduleの外まで見えるわけですが、 module内ならメソッドの中まで見えるものというと、クラス変数かな。 > まったく垂直というのもありかもしれませんが。 ここで「垂直」というのはどういう意味でしょうか? > >> def bar > >> foo$baz > >> end > >> > >> 相当にするということも考えられるけど、どうなんでしょ。 > > > >全部自分でnamespaceを指定することになりそうな気がしますが、それ > >ではかえって不便のような。 > > 確かにこれは不便ですよね。ただ、前者と後者を組み合わせたもの、 > つまり、 > > using foo > def bar > baz > end > > を > > def foo$bar > foo$baz > end > > 相当にするのはあり得るかもしれない。 bazが全部foo$bazになってしまうと、foo以外のnamespaceのメソッド を呼び出すにはすべてhoge$bazとかglobal$bazとか書かなければなら なくなるんじゃないでしょうか。そう考えると、二つを組み合わせて も改善はされないんじゃないかと思うんですが。 > ところで、そもそも selector namespace の必要性ってのは、どういう要請 > によるものでしょうか。 > > ひとつの例としては jcode.rb は使い難いという話がありますね。 > require しただけでスクリプト中の全ての String#tr の定義が変わって > しまうのがイヤだと。 > > 他には、私としては、Integer#/ の定義を一時的に変えたいというのもあ > るんですが、つまり、 > > using mathn > rational_array = [1/2, 1/3, 1/4] > > みたいな感じで有理数の配列が出来たらうれしいなと思ったりするんだけ > ど、これは守備範囲外ででしょうか。 それは範囲内じゃないですか。 > もっと局所的に、String#each を > 一瞬 String#each_byte にしたいとか。そういのは別の話なのかな。 使い方によるのでは。[ruby-dev:27417]によると、 > usingが効力を及ぼす範囲が、静的なスコープであるとします。 ということなので、例えば、String#collectが呼び出すメソッドを each_byteに変えたい、ということなどは無理だと思います。 --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦