From: TAKAHASHI Masayoshi Date: 2001-12-09T12:18:22+09:00 Subject: [ruby-list:32842] Re: dir_config (mkmf.rb) のオプション指定の優先順位 高橋征義です。 内容からいけばruby-devかと思うんですが、「わかりやすい コードの書き方」という意味で、こっちに流します。 nobu.nakada@nifty.ne.jp wrote: > > > 優先順位を考えるとその方がわかりやすそうですが、 > > > やってることのわかりにくさはかわらない(^^; > > > > ごもっとも。 > > つーわけでリベンジ(謎)。 リベンジってことは「わかりにくさ」をなんとかする、ということ ですよね? ということであれば、 > -def dir_config(target, idefault=nil, ldefault=nil) > - if idefault && ldefault == nil > - default = idefault > +def dir_config(target, *default) > + case default.size ^^^^^^^*1 > + when 0, 1 > + default, = default ^^^^^^^*2 ^^^^^^^*1 > + when 2 > + idefault, ldefault = default ^^^^^^^*1 > + else > + raise ArgumentError, "too many default directories" > + end > + default = with_config(target + "-dir", default) ^^^^^^^*3 ^^^^^^^*2 > idefault = default + "/include" ^^^^^^^*3 > ldefault = default + "/lib" ^^^^^^^*3 > end defaultが3通りの意味で使われているのはさすがに「わかりにくい」 と思うです。 というわけで、*1をdefault_args または args、*3をdirにする、 なんてのがidir/idefault、ldir/ldefaultとの対称性からもわかり よいんではないかと思いました。どうでしょ。 # もちろんいっそのこと、がばっと変数名をリファクタするという # 手もありますが、めんどくさいですよね。 それはさておき、引数の数やクラスによって意味が変わるメソッド を、Rubyでわかりやすく記述するのってむずかしいですよね。 いつも悩みます。 高橋征義 (TAKAHASHI Masayoshi) E-mail: maki@open-news.com 「彼の言葉には必ず3通りの意味がある」ってアシモフ『銀河帝国 の興亡』でしたっけ?<9通りだったかも<どうでもいいって(汗;