From: Minero Aoki Date: 2002-09-01T17:40:47+09:00 Subject: [ruby-dev:18135] Re: Selection IPv4/IPv6 at TCPSocket あおきです。 In mail "[ruby-dev:18134] Re: Selection IPv4/IPv6 at TCPSocket" "Shin'ya Adzumi" wrote: > あづみです。 > > Net::POP と APOP を作ってみた経験からすると、クラスで分けるのは > > どことなく不便です。たとえばリソースファイルの値で分岐しようと > > すると > > > > (apop ? Net::APOP : Net::POP).new(...) > どの辺がみっともなくて、どの辺が不便なんでしょう? > この例だと別にクラスで分けてなくてもあんまり変わらないんではという気 > が。 「クラスを値として使う」というのはどの言語でも通用する テクニックではないので、自明さが下がります。たぶん初心者なら if apop? Net::APOP.new(.....) else Net::POP.new(.....) end と書くでしょう。そうすると次のように全引数を二回書くか、 if get_pop_server_is_apop(....) Net::APOP.new(get_pop_server_host(....), get_pop_server_port(....)) else Net::POP.new(get_pop_server_host(....), get_pop_server_port(....)) end あるいはローカル変数をベタベタと書くことになります。 host = get_pop_server_host(....) port = get_pop_server_port(....) apop = get_pop_server_is_apop(....) if apop Net::APOP.new(host, port) else Net::POP.new(host, port) end これはかなり汚ないですよね。 ------------------------------------------------------------------- 青木峰郎