[#21718] print, puts, printf — Masaki Suketa<CQN02273@...>
助田です.
[#21732] GtkRadioMenuItem activate — mof <mof@...>
はじめまして、「もふ」といいます。よろしくお願いします。
[#21736] OBJECTDAY 2000 — 助田 雅紀 <masaki.suketa@...>
助田です.
けいじゅ@日本ラショナルソフトウェアです.
石橋秀仁です。
けいじゅ@日本ラショナルソフトウェアです.
石橋秀仁です。
[#21738] ruby の W3C ドラフト — KUBO Takehiro <tkubo@...>
久保@茅ヶ崎市です。
[#21781] how to get error reason in ftplib ? — "Kikutani, Makoto" <kikutani@...>
前にも似たことを聞いた気がしますが....
[#21789] about ftplib(ftpup) — goto@...
お世話になります。後藤@横河工事です。
[#21798] script language magazine? — Akihiro Yamauchi <aygoofy@...>
こんばんは。
[#21818] RubyToken::TkSTRING::value — Yasushi Shoji <yashi@...>
やすしです。
[#21834] How can i use mod_ruby — goto@...
お世話になります。後藤@横河工事です。
[#21837] site_ruby & Linux distribution — OZAWA Sakuro <crouton@...>
小澤さくです。
[#21843] [Q]Security Check($SAFE): FileTest within mod_ruby — Hideto ISHIBASHI <hideto-i@...4u.or.jp>
石橋秀仁です。
まつもと ゆきひろです
[#21870] rubyunit — rubikitch <rubikitch@...>
るびきちです。
[#21892] ユーザーの新規登録方法について — goto@...
いつもお世話になります、後藤@横河工事です。
[#21905] rd-draft.ja.rd — akira yamada / やまだあきら <akira@...>
[#21922] ruby-1.4.4 binary for BeOS 5 (Intel) — tenmei@... (Noriaki Harada)
はらだです。
はじめまして、内藤と申します。
>はじめまして、内藤と申します。
内藤です。
小松です。
再び内藤です。
小松です。
はらだです。
市川 as Tanukiです。
[#21931] ruby-mode — Yasushi Abe <yasushi@...>
こんにちわ、阿部です。
[#21934] close on disk full — "Kikutani, Makoto" <kikutani@...>
curでディスクがフルな状態でPOPするとメイルを失なうという
In message "[ruby-list:21934] close on disk full"
[#21944] [Q] RD with CSS — gotoken@... (GOTO Kentaro)
ごとけんです
[#21956] Thread & STDIN — Masato Toyoshima <mt@...>
はじめまして、豊島といいます。
まつもと ゆきひろです
[#21974] Re: Polynomial.rb and floating point exception — "K.Kodama" <kdm@...>
児玉 です.
[#21981] rd2man — WATANABE Hirofumi <eban@...>
わたなべです.
Toshです。
わたなべです.
青山です。
Toshです。
青山です。
[#21990] rb.org — OZAWA Sakuro <crouton@...>
さくです。
[#21999] media watch 2000.03.18 — Noritsugu Nakamura <nnakamur@...>
[#22014] shell interactive — WATANABE Daisaku <dwata@...3.rim.or.jp>
児玉 です.
こんにちは、時田です。
なかだです。
わたなべです.
こんにちは、時田です。
わたなべです.
まつもと ゆきひろです
Sat, Apr 22, 2000 at 12:37:33AM +0900 において
まつもと ゆきひろです
こんにちは、時田です。
まつもと ゆきひろです
こんにちは、時田です。
[#22022] w3ml — とみたまさひろ <tommy@...>
とみたです。
[#22026] assert — "友谷 登" <ntomo@...>
はじめまして友谷です
[#22069] Re: #define const — Toyofuku <toyofuku@...>
豊福です。
[#22075] erb-1.2.2 — Masatoshi SEKI <m_seki@...>
石橋秀仁です。
[#22087] media watch 2000.03.24 — Noritsugu Nakamura <nnakamur@...>
[#22103] Please put ruby-1.4.4.tar.gz in pub/lang/ruby/1.4/ — "Akinori -Aki- MUSHA" <knu@...>
お願いがあるのですが、 ruby-1.4.4.tar.gz を FTP ツリーの 1.4/
[ruby-list:22103]におきまして、2000/04/25 12:38ほどに、
新井です。
まつもと ゆきひろです
わたなべです.
まつもと ゆきひろです
新井です。
Toshです。
[#22117] StateGraph: state machine interpreter — Hideto ISHIBASHI <hideto-i@...4u.or.jp>
石橋 "rubyholic" 秀仁です。
From: Hideto ISHIBASHI <hideto-i@rr.iij4u.or.jp>
石橋 "rubyholic" 秀仁です。
やすし % GUI大好きです。
[#22159] $LOAD_PATH への追加について — "Sugawara Hajime" <sugawara@...>
はじめまして、菅原@ホビー・データです。
菅原@ホビー・データです。
[#22164] Directory Cabinet Program — sekita-n@... (Nobutaka SEKITANI)
関谷@電通大です。
[#22171] postgres.c のエラーメッセージ — Saitou Noboru <noborus@...>
まつもと ゆきひろです
[#22181] Can't Use optparse — Yamada Kenji <kyamada@...>
Toshです。
なかだです。
Toshです。
なかだです。
Toshです。
新井です。
新井です。
Toshです。
新井です。
Toshです。
[#22188] Web Robot of Ruby — Ryunosuke Ohshima <ryu@...>
大島@北陸先端科学技術大学院大学です。
[ruby-list:22115] デフォルト付き attr_reader
中島@ブレーンです。
attr_readerの派生バージョンを作ろうとしています。一応、目的の
ものはできたのですが、ちょっと見苦しいので、もっと良い方法があ
るような気がします。何かよい方法があれば教えてください。
やろうとしていることは、デフォルトを指定できるattr_readerです。
つまり、attr_readerはその変数が定義されてないとnilを返すので、
nilのかわりに、指定した値を返すようにしたいのです。そして、こ
れにいくつか機能をつけ加えて、自作のフレームワークに組込もうと
しています。
一応、目的を満たしたバージョンは次のとおりです。
-----------------------------------------------------------
module M1
def setup_defaults
module_eval "Defaults = {}"
end
def attr_reader_with_default(var_name, val)
var_name = var_name.id2name if var_name.kind_of?(Integer)
set_defaults(var_name, val)
module_eval <<-END
def #{var_name}
if @#{var_name}
@#{var_name}
else
instance_eval { Defaults["#{var_name}"] }
end
end
END
end
def set_defaults(var_name, val)
class_eval "Defaults[\"#{var_name}\"] = val"
end
end
-----------------------------------------------------------
使用例
-----------------------------------------------------------
class A1
extend M1
setup_defaults
attr_reader_with_default :v1, "A1.v1 default"
attr_reader_with_default :v2, "A1.v2 default"
def initialize
@v2 = "A1.v2"
end
def test
print "v1=#{v1} v2=#{v2} in A1\n"
end
end
class A2
extend M1
setup_defaults
attr_reader_with_default :v1, "A2.v1 default"
attr_reader_with_default :v2, "A2.v2 default"
def initialize
@v2 = "A2.v2"
end
def test
print "v1=#{v1} v2=#{v2} in A2\n"
end
end
A1.new.test
A2.new.test
-----------------------------------------------------------
実行結果
-----------------------------------------------------------
[tnaka@ryoma tmp]$ ruby test.rb
v1=A1.v1 default v2=A1.v2 in A1
v1=A2.v1 default v2=A2.v2 in A2
-----------------------------------------------------------
つまり、
attr_reader_with_default :var_name 既定値
と定義しておくと、var_nameというメソッドが、@var_nameというイン
スタンス変数のアクセッサになります。そして、@var_nameが定義さ
れてない場合は、既定値を返却します。
問題はこの既定値を覚えておく場所です。既定値はクラスごとに違い
ますから、クラスごとに定義されます。そこで、ruby本のクラス定数
もどきの技を使って、
Defaults = {}
とすればいいと思ったのですが、これを単純にM1の中に書いてもうま
くいかず、試行錯誤しているうちに上記のコードとなりました。直し
たいのは、以下の3点です。
1) setup_defaultsの呼びだしを不要にしたい
attr_reader_...だけ書けば使えるようにしたいのですが、クラス変
数もどき(Defaults)をモジュール内で定義する方法がわかりませんで
した。
2) extend M1 でなく include M1 にしたい
つまり、M1の中で普通のメソッドも定義したいのです。
module M2
extend M1
def ..... end
end
とか、その逆とかやったのですが、だめでした。
3) evalが多すぎるが、できれば削りたい
なんとなく、無駄な遠回りをしているような気がするのですが、どう
もよくわかりません。
クラス変数もどきを使うと仮定して問題を単純にすると次のようにな
ります。
-----------------------------------------------------------
module M2
def make_classval
class_eval "Classval = {}"
class_eval <<-END
def get_classval
instance_eval { Classval[0] }
end
END
end
def set_classval(val)
class_eval { Classval[0] = val}
end
end
class B1
extend M2
make_classval
set_classval("B1")
def initialize
print "B1::Classval=",get_classval,"\n"
end
end
class B2
extend M2
make_classval
set_classval("B2")
def initialize
print "B2::Classval=",get_classval,"\n"
end
end
B1.new
B2.new
-----------------------------------------------------------
つまり、def ... endの外側でクラス変数に値を代入して、メソッド
の中で取り出せればいいわけです。
これに対して
1) make_classvalをなくしたい
2) extendでなくimportですむようにしたい
または、get_classvalをevalでなく直接定義したい
3) xxx_evalは全部必要か?
ということです。あるいは、全く違う実装方法でももちろんかまいません。
-------------------------------------------------------------
中島 拓 (株)ブレーン パッケージ開発部 (p95@brain-tokyo.co.jp)
http://www03.u-page.so-net.ne.jp/dc4/tnaka/