From: Koji Arai Date: 1999-01-30T03:54:28+09:00 Subject: [ruby-dev:4496] Re: permit to put a comma 新井です。 >>> From: matz@netlab.co.jp (Yukihiro Matsumoto) >>> Date: 29 Jan 1999 12:53:43 +0900 >>> Subject: [ruby-dev:4484] Re: permit to put a comma > まつもと ゆきひろです > 気持ちは分かるんですが,なんかかなり抵抗があります. > そんな言語がほとんどないってのも理由ですが. あれぇ?「かなり」ですか?私はそれほどでもないので すが。 C言語で enum {a,b,c,} を許したのは、続きを書くのに 便利だからという単純な理由であって、けっして他の言 語のマネをしたからではないと思います(知らないけど)。 メソッドの引数追加と構造体のメンバ追加は、全然質が 違うと思うんですよ。構造体メンバの追加の頻度はメソッ ドのそれより高いと思います。 そもそも構造体定義をメソッドで実装したというところ からこの要望が出てしまってるので、他の言語に例がな いのは仕方ないんじゃないでしょうか? # スイマセン、他の言語のことはよく知らないので変な # こと言ってるかもです。 構文を変えることに抵抗があるようでしたら、百歩譲っ て… # 引数がArrayの場合 hoge_ary = Struct.new("Hoge", [ :a, :b, :c, ]) や、 # 引数がHashの場合 hoge_hash = Struct.new("Hoge", { :a => 1, :b => 2, :c => 3, }) や、 # 引数がHashの略記法の場合 hoge_hash2 = Struct.new("Hoge", :a => 1, :b => 2, :c => 3, ) こういうのを許すってのは。どうです? # hoge_hash2 は、構文的に無理か。最初の要望をもっ # と複雑にしただけですね? ^^; ちょっと回りくどい気はするけど、副作用として hoge_ary.new(1,2,3) # 通常通り hoge_hash.new(1,2,3) # ダメ hoge_hash.new() # hoge_ary.new(1,2,3)と同じ という特徴を持たせることが出来ます。 ハッシュの場合はあらかじめ初期値を持った構造体クラ スを定義できるということです。 と、ここまで来て、今さら思い付いたけど hoge = Struct.new("Hoge", *[ :a, :b, :c, ]) や、コメントが書けないけど hoge = Struct.new("Hoge", *%w( a b c )) などとすれば、今の仕様でもOKですね。 パッと見、第3者には何をやってるのかわからないのが 難点ではあります。 最後に","を書いてもよいことにするのが一番素直だと 思いますよ。他の機能のために予約したいってことで したら代替案を思い付いたことですし、あきらめますが。 > それとこのリクエストってメソッド定義の引数の末尾に書きたいん > ですが,メソッド呼び出しの末尾に書きたいんですか. 構造体を"定義"していることから、勘違いしてしまいま した。もちろん、メソッド呼び出しの方です。