[#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:22134] クラス変数モジュール (Re: デフォルト付き attr_reader)
中島@ブレーンです。
やっぱりあったのですね!ずっとかっこいい解が・・・rubyなら、な
んかあるだろうと思っていましたが、予想以上に短くてシンプルで驚
きました。
そこで、復習の意味もかねてこれを応用してクラス変数のモジュール
を作ってみました。
def_class_var :cv1, 0
というふうにクラス変数を定義できるようになります(2つめのパラメー
タは既定値)。そして、代入は
set_cv(:cv1, cv1+1)
です。参照は単純に変数名で参照できます。
-------------------------------------------------------------
# includeするとクラス変数が使えるようになるモジュール
module ClassVar
def ClassVar::append_features(klass)
super
def klass::def_class_var(var_name, initial_value=nil)
var_name = var_name.id2name unless var_name.kind_of?(String)
module_eval <<-END
Class_var_#{var_name} = []
Class_var_#{var_name}[0] = initial_value if initial_value
def #{var_name}
Class_var_#{var_name}[0]
end
def #{var_name}=(val)
Class_var_#{var_name}[0] = val
end
END
end
end
def set_cv(var_name, value)
var_name = var_name.id2name unless var_name.kind_of?(String)
instance_eval "Class_var_#{var_name}[0] = value"
end
end
# 使用例
class B1
include ClassVar
# クラス変数定義
def_class_var :cv1, 0
def_class_var :cv2, "cv2 defalut"
def initialize(name)
@name = name
end
def increment_cv
# 参照と代入
set_cv(:cv1, cv1+1)
# self.cv1 = cv1 + 1
end
def method1
print "method1 was called for #{@name}\n"
increment_cv
if cv1 > 1
set_cv(:cv2, "cv2 changed by #{@name}")
#self.cv2 = "cv2 changed by #{@name}"
end
end
def show
print "cv1 (in #{@name}) = #{cv1}\n"
print "cv2 (in #{@name}) = #{cv2}\n"
end
end
b11 = B1.new("B1_1")
b12 = B1.new("B1_2")
b11.show
b12.show
b11.method1
b11.show
b12.show
b12.method1
b11.show
b12.show
-------------------------------------------------------------
実行結果は次のとおりです。
-------------------------------------------------------------
[tnaka@ryoma tmp]$ ruby test3.rb
cv1 (in B1_1) = 0
cv2 (in B1_1) = cv2 defalut
cv1 (in B1_2) = 0
cv2 (in B1_2) = cv2 defalut
method1 was called for B1_1
cv1 (in B1_1) = 1
cv2 (in B1_1) = cv2 defalut
cv1 (in B1_2) = 1
cv2 (in B1_2) = cv2 defalut
method1 was called for B1_2
cv1 (in B1_1) = 2
cv2 (in B1_1) = cv2 changed by B1_2
cv1 (in B1_2) = 2
cv2 (in B1_2) = cv2 changed by B1_2
-------------------------------------------------------------
代入は set_cvだけでなく、変数名=というメソッドも定義したのです
が、これを呼びだすには、
self.cv1 = .....
という書き方が必要になるようなので、set_cvというメソッドを別に
定義しています。
「変数名で変数の種別がわかる」というrubyの特色が一部失われます
が、それに目をつぶれば、多少は使えるような気がします。
それから、このクラス変数はサブクラスで再定義できます。上のコー
ドに下記のコードをつなげてみると
-------------------------------------------------------------
class B2 < B1
def_class_var :cv2, "redefined default"
end
b21 = B2.new("B2_1")
b11.show
b21.show
b21.method1
b11.show
b21.show
-------------------------------------------------------------
実行結果は
-------------------------------------------------------------
cv1 (in B1_1) = 2
cv2 (in B1_1) = cv2 changed by B1_2
cv1 (in B2_1) = 2
cv2 (in B2_1) = redefined default
method1 was called for B2_1
cv1 (in B1_1) = 3
cv2 (in B1_1) = cv2 changed by B1_2
cv1 (in B2_1) = 3
cv2 (in B2_1) = cv2 changed by B2_1
-------------------------------------------------------------
cv1は再定義されてないので、上位クラスと共有します。cv2は再定義
したので、class B2独自のクラス変数になります。B1(上位クラス)の
メソッド内で、
set_cv(:cv2, "cv2 changed by #{@name}")
とやると、B2(下位クラス)の方のcv2が変更されます。つまり、C++な
どと違って、クラス変数も動的結合になります。
# 長年C++を使ってきたので、こういう動的オブジェクト指向がおも
# しろくてハマッてます。10年以上前にsmalltalkの青本を読んで
# 「こういう言語で遊びたい」と思ったのですが、やっと夢がかなっ
# た感じです。まつもとさんには感謝してます。
-------------------------------------------------------------
中島 拓 (株)ブレーン パッケージ開発部
(p95@brain-tokyo.co.jp)
http://www03.u-page.so-net.ne.jp/dc4/tnaka/