[#29371] commit miss — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
7 messages
2006/09/01
[#29374] nil.to_s — Shugo Maeda <shugo@...>
前田です。
59 messages
2006/09/01
[#29375] Re: nil.to_s
— "U.Nakamura" <usa@...>
2006/09/01
こんにちは、なかむら(う)です。
[#29380] Re: nil.to_s
— Yukihiro Matsumoto <matz@...>
2006/09/01
まつもと ゆきひろです
[#29387] Re: nil.to_s
— Shugo Maeda <shugo@...>
2006/09/01
前田です。
[#29390] Re: nil.to_s
— Yukihiro Matsumoto <matz@...>
2006/09/01
まつもと ゆきひろです
[#29398] Re: nil.to_s
— "NARUSE, Yui" <naruse@...>
2006/09/01
成瀬です。
[#29400] Re: nil.to_s
— Yukihiro Matsumoto <matz@...>
2006/09/01
まつもと ゆきひろです
[#29405] Re: nil.to_s
— "NARUSE, Yui" <naruse@...>
2006/09/02
成瀬です。
[#29520] Re: nil.to_s
— Yukihiro Matsumoto <matz@...>
2006/09/07
まつもと ゆきひろです
[#29396] Re: nil.to_s
— "U.Nakamura" <usa@...>
2006/09/01
こんにちは、なかむら(う)です。
[#29409] Re: nil.to_s
— Yukihiro Matsumoto <matz@...>
2006/09/02
まつもと ゆきひろです
[#29376] Re: nil.to_s
— Shugo Maeda <shugo@...>
2006/09/01
前田です。
[#29406] too slow drb test — Tanaka Akira <akr@...>
とあるホスト (というのは td176.testdrive.hp.com ですが) で
5 messages
2006/09/02
[#29416] build failed on osx — Masatoshi SEKI <m_seki@...>
咳といいます。
8 messages
2006/09/02
[#29426] Re: build failed on osx
— Mitsuhiro Kondo <miche@...>
2006/09/03
近藤と申します。
[#29436] Re: build failed on osx
— Masatoshi SEKI <m_seki@...>
2006/09/03
咳といいます。
[#29423] Time#rfc2822 — Tadayoshi Funaba <tadf@...>
ふなばです。
9 messages
2006/09/03
[#29427] Re: Time#rfc2822
— Tanaka Akira <akr@...>
2006/09/03
In article <20060903.111434.71084310.tadf@dotrb.org>,
[#29429] Re: Time#rfc2822
— Tadayoshi Funaba <tadf@...>
2006/09/03
> Time が utc なら時差情報は出さないのが意図であると推測するの
[#29432] Re: Time#rfc2822
— Tanaka Akira <akr@...>
2006/09/03
In article <20060903.140151.74756121.tadf@dotrb.org>,
[#29447] Struct::Tms.instance_methods(false) contains false — Tanaka Akira <akr@...>
以下のように、instance_methods の結果に false が入ることがあります。
4 messages
2006/09/03
[#29473] ext/tk/tkutil — nobu@...
なかだです。
8 messages
2006/09/04
[#29474] Re: ext/tk/tkutil
— Yukihiro Matsumoto <matz@...>
2006/09/04
まつもと ゆきひろです
[#29491] symbol and string — Tanaka Akira <akr@...>
open-uri で :proxy=>nil という指定を行うと、以下のようにエラーになります。
33 messages
2006/09/05
[#29499] Re: symbol and string
— Yukihiro Matsumoto <matz@...>
2006/09/05
まつもと ゆきひろです
[#29500] Re: symbol and string
— Tanaka Akira <akr@...>
2006/09/05
In article <1157470154.047826.13379.nullmailer@x31.priv.netlab.jp>,
[#29503] Re: symbol and string
— Yukihiro Matsumoto <matz@...>
2006/09/06
まつもと ゆきひろです
[#29504] Re: symbol and string
— Tanaka Akira <akr@...>
2006/09/06
In article <1157505538.340126.8472.nullmailer@x31.priv.netlab.jp>,
[#29507] Re: symbol and string
— Yukihiro Matsumoto <matz@...>
2006/09/06
まつもと ゆきひろです
[#29512] Re: symbol and string
— keiju@... (石塚圭樹)
2006/09/06
けいじゅ@いしつかです.
[#29529] Re: symbol and string
— SASADA Koichi <ko1@...>
2006/09/08
ささだです。
[#29530] Re: symbol and string
— Yukihiro Matsumoto <matz@...>
2006/09/08
まつもと ゆきひろです
[#29532] Re: symbol and string
— Masatoshi SEKI <m_seki@...>
2006/09/08
咳といいます。
[#29533] Re: symbol and string
— Yukihiro Matsumoto <matz@...>
2006/09/08
まつもと ゆきひろです
[#29601] cgi.rbのformの挙動 — Fujioka <fuj@...>
藤岡です。
12 messages
2006/09/26
[#29602] Re: cgi.rbのformの挙動
— Yukihiro Matsumoto <matz@...>
2006/09/26
まつもと ゆきひろです
[#29603] Re: cgi.rbのformの挙動
— Fujioka <fuj@...>
2006/09/26
藤岡です。
[#29604] Re: cgi.rbのformの挙動
— "Nobuyoshi Nakada" <nobu@...>
2006/09/26
なかだです。
[ruby-dev:29407] Re: nil.to_s
From:
Minero Aoki <aamine@...>
Date:
2006-09-02 09:00:04 UTC
List:
ruby-dev #29407
青木です。
nil.to_s は "" 派で参戦します。
In mail "[ruby-dev:29402] Re: nil.to_s"
Shugo Maeda <shugo@ruby-lang.org> wrote:
> 前田です。
> > |Ruby でのルーズな tips として、
> > |その値が文字列か nil かわからないときに nil.to_s を使う、
> > |というのがあるかと思います。
> >
> > そうなんですか。
>
> 残念ながら使っている人は多いです。
> 私も使っていると思います。
わたしも意識的に使ってます。「||」などで置き換えられるのは
わかりますが、to_s のほうがメソッドチェーンで書けるので便利
だし気持ちいいんです。前に戻って括弧をつけるのはめんどくさいし
見にくいです。
> > この人工的な例からnil.to_sが""であるべき理由を読み取ることは
> > できませんでした。この例は「存在しないキーに対して空文字列が
> > ほしい」ということなんだと思うんですが、そういう目的のために
> > Hashにはデフォルト値が用意されてますよね。
>
> Hash以外にも引数などがnilかもしれない時に
>
> def foo(x)
> ... x.to_s ...
> end
>
> とするようなケースがありますよね。
>
> x || ""の方が好ましいと思いますが、上記のようなコードも多い
> と思います。
わたしの書いた、実際に使っているコードから探してきた例だと
こんなのがありました。
def format(m, template)
template.gsub(/%\w+/) {|key|
case key
when '%subject'
m.subject.to_s.strip
when '%from'
m.friendly_from.to_s.sub(/@.*/, '@...').strip
when '%body'
Iconv.conv(@dest_encoding, (m.charset || 'iso-2022-jp'), m.body.to_s.strip)
else
raise ArgumentError, "unknown mail part name: #{key.inspect}"
end
}
end
このメソッドの to_s は全部 nil が "" に変換されることを
狙って使っています。
で、わたしの主張としては、nil.to_s は "" がいいと思います。
理由は以下の 3 点です。
1. 互換性がなくなる (しかも影響が大きい)
2. 代替として示された「||」を使う方法などは楽でも気持ちよくもない。
3. まつもとさんの言う
「『そのオブジェクトがどんなものであるか』がはっきり分かる文字列」
というのは、まさに inspect が果たすべき役割だと思う
(ので、to_s にそれを求めるのはおかしい)。
もし puts や printf での特別扱いがあるから nil.to_s は "nil"
にすべきだというのであれば、わたしも、その特別扱いのほうをむしろ
やめるべきだと思います。というか、あれは昔から嫌だなあと思ってま
した。今回の件には関係なく特別扱いはやめちゃいましょうと主張します。
さらに、どうしても nil.to_s == "" がだめなら次善の策として、
nil.to_s を定義しないことを主張します。
Object#to_s が定義されているから nil.to_s も必要、という主張も
されていますが、わたしはそれならむしろ Object#to_s を廃止すべき
だと思います。デバッグ用には inspect があれば十分ですし、すべての
オブジェクトが文字列に変換できるという根拠はないと思います。Ruby
1.9 で Object#to_a も消えたんですから、to_s も消しちゃえばいい
じゃないですか。
--
青木峰郎