[#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)
ごとけんです
Toshです。
[#21956] Thread & STDIN — Masato Toyoshima <mt@...>
はじめまして、豊島といいます。
まつもと ゆきひろです
[#21974] Re: Polynomial.rb and floating point exception — "K.Kodama" <kdm@...>
児玉 です.
[#21981] rd2man — WATANABE Hirofumi <eban@...>
わたなべです.
Toshです。
わたなべです.
青山です。
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" 秀仁です。
石橋 "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:22122] Re: shell interactive
石橋秀仁です。
> こんにちは、時田です。
> > だから、Decoratorパターンなんですよ。JavaのStream系と同じ。
> > でも、ぼく自身は必要性を感じません。上記のようにmix-inで済むから。
>
> Javaを知らないから Decoratorパターンってのが、よくわからないんですよね(^^;
> いや、「これがそーだっ」ってのは printf のすげ替えでなんとなくわかるんですけど
> 「だから、Decoratorパターンなんですよ」って事は、単なるすげ替えとは
> 違うって事ですよね?
> 手法でなく、どういう思想のものなのかだけ教えてもらえますか?
> つまり、マクロアセンブラでいう所のマクロ的なプリプロセッサによるすげ替え
> との違いを簡単にで構わないので(^^;
たしかに、"alias print_old print"というのは、
われながら気持ちわるいです (^^;
だから、もうすこし工夫して、
* 継承してsuperを呼ぶ
* Decoratorパターンを使う
というのを考えました。(で、Decoratorについては説明しませんでしたね)
まず、やみくもに継承するのはOOPL初心者のC++ユーザがやりがちで、
一番よくない。次に、いちおうdelegate.rbのDelegate(Proxy)でも
解決できますが、もう一声ほしいところです。
そこで、Decoratorパターン (別名Wrapper) というのが出てきます。
「オブジェクトに動的に責任を追加する」。具体的には、あるクラスに
機能を追加したいときに、「透明」なクラスを「かぶせる (ラップする)」。
「透明」とは、「インターフェースを変更しない」という意味。
つまり、もとのクラスと全く同じように使える。
たとえば、
class Foo
def initialize(foo)
@foo = foo
end
attr :foo
def bar
print foo
end
end
class FooWrapper
def initialize(obj)
@obj = obj
end
def foo
@obj.foo
end
def bar
print "foo = ", @obj.foo, "\n"
end
end
foo = Foo.new("test")
foo.bar # => "test"
wrapped_foo = FooWrapper.new(foo)
wrapped_foo.bar # => "foo = test\n"
このコードで、Foo (foo)とFooWrapper (wrapped_foo)は、
同じメッセージを受けつけます。インターフェースだけでは
見分けがつきませんね?これを「透明」といいます。
で、ちょうどいいときに、前田さんのメールがありました。
From: Shugo Maeda <shugo@ruby-lang.org>
Subject: [ruby-list:22096] libwrap-ruby
> 前田です。
> require "tcpd"
>
> serv = TCPServer.open(ARGV.shift || "echo")
> tcpd = TCPWrapper.new("echod", serv, true, 30)
> loop do
> ns = tcpd.accept
> Thread.start do
> s = ns
> while line = s.gets
> s.print(line)
> end
> s.shutdown
> s.close
> end
> end
既存のクラス (IOやらSocketやら) に手をつけずに、
こういう拡張ができるところがDecoratorの利点ですね :)
--
Hideto "rubyholic" ISHIBASHI