[ruby-dev:39852] Re: Time.now + str と #to_r

From: "NARUSE, Yui" <naruse@...>
Date: 2009-12-07 05:36:12 UTC
List: ruby-dev #39852
成瀬です。

2009/12/07 12:42, Yukihiro Matsumoto wrote:
> * 基本的クラス(int,str,ary)以外はフルネーム.to_lower

FooBar クラスの場合は、to_foobar ですか、 to_foo_bar ですか

> このパッチの最大の弱点は作った本人もtoとasがどっちがどっちだ
> か忘れてしまうというところでしょう。また、変更の規模が大きい
> ので1.9.2には手遅れという感もあります。私としてはto_rやto_dが
> これ以上広まらないうちに手を打ちたいのですが、そのへんは
> Yuguiさんの判断に任せるとして。

1.9.2 のリリースは 2010 年 6 月頃だと思っているので、
猶予はまだあるかなぁと思っていますが、まぁ Yugui さん判断ですね。

> あるいは上記問題のまったく別の解決方法が思いつい
> た場合には、それも聞きたいです。数の相互型変換を行うようなシ
> ステムの構築という解もありえるかもしれません。

* String を明示的に Rational に変換するメソッドはあってよい
* String を暗黙的に Rational に変換するメソッドはあってはならない
* Time を明示的・暗黙的に Rational に変換するメソッドはあってよい
と思うので、おなじ解決策になるように思います。

> で、明示的な変換と暗黙的な変換のための命名原則はどのようなも
> のがよいのか、という点について、いろいろとご意見を聞かせてく
> ださいませ。

暗黙的変換が to_xxx である、ということが、互換性的に動かせない以上、
明示的変換をいかにも「明示的」なメソッドにした方がよいように思うところ、
as_xxx というのはちょっと弱いんじゃないでしょうか。
convert_xxx とか cast_xxx とか、もっといかにもなメソッド名のほうが
いいように感じます。

> あと、現状では明示的な変換の方は
> 
>    "foo".to_i # =>  0
> 
> のような、わりとカジュアルな変換をしていますが、これはうれし
> いことが少ないので、今後新たに追加する場合は(Raional も含め
> て)、エラーをあげるべきではないかと思うようになりましたが、こ
> れはまた別の話として議論すべきでしょう。

String#to_i / NilClass#to_i に関してはたまに使います。
http://gist.github.com/213354 例えばこれ
外から来た入力を数値に変換した上で値域を見たい場合に使っています。
もっとも、これは NilClass#to_i があるという特殊性から来ているので、
これから外れるものにはあたらないかもしれませんが。
# NilClass#to_r は現在存在する

-- 
NARUSE, Yui  <[email protected]>

In This Thread