[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000066] Re: gtrb & multi-D array



沼口です.

 > In message "[dennou-ruby:000064] Re: gtrb & multi-D array"
 >     on 99/09/03, Numaguti Atusi <numa@xxxxxx> writes:
>> a[1..2, 0..1=>2, 5]  とか 書ければまだいいのですが,
>> パーサエラーになってしまいますよね.
>> a[1..2, 5, 0..1=>2]  なら通るのだけど.

 > a[1..2, '0..1 : 2', 4, 5]
 > a[1..2, /0..1 : 2/, 4. 5]
 > これもやっぱり…

これなら  a[1..2, {0..1,2}, 4, 5] 
のほうがましかな :-)

 > まぁやはり作戦としては、とりあえず Array か Hash で妥協して、それを
 > Sequence なりに変換する。んで一方で、今の文法とかぶらないように文法を
 > 違法改造して、この文法を認めてくれと本家に迫る、あたりかも知れません。

そういうことでしょうね.

 > しかし、この場合Ruby的な思考方法として考えないといけないのは単に構文糖
 > ではなくてリーズナブルなクラスとそれに対するリテラルでしょうからをクラ
 > スはともかくリテラルの方は本家で認められるほどよさげなものを考え出すの
 > は結構難しいかなとは思います。

構文糖になってしまいますけど,たとえば,
 a[1..2, 0..1->2, 5]  とかいう書き方を認める,というのはダメですかね.
どういうことかというと,
  key->val は,ハッシュ key=>val と同じ意味だが,
  keyと val の組はハッシュあたり一つに限定する
  (複数並べたら,複数のハッシュとなる).
  そのかわり,引数リストの任意の位置に {} なしで書ける.
  つまり, a[1..2, 0..1->2, 5->6] を  def [](*arg) で受けると,
  arg[0]=1..2, arg[1]={0..1=>2}, arg[2]={5=>6} となる.

ええと,明日は Ruby workshop ですね.
すみませんけど,私,やはり行けません.
もし,ネタ提供が必要あれば,出せるものは出しますので,言ってください.

-- 
沼口  敦@北海道大学大学院地球環境科学研究科 大気海洋圏環境科学専攻
tel:011-706-2365 fax:011-706-4865 〒060-0810 札幌市北区北10条西5丁目  
numa@xxxxxx