Techioz Blog

Ruby における to_s と to_str (および to_i/to_a/to_h と to_int/to_ary/to_hash)

概要

私は Ruby を学んでいますが、特に to_s と to_str (同様に to_i/to_int、to_a/to_ary、to_h/to_hash) など、少し混乱するメソッドがいくつかありました。私が読んだ内容では、短い形式 (to_s など) は明示的な変換用であり、長い形式は暗黙的な変換用であると説明されています。

to_str が実際にどのように使用されるのかよくわかりません。 String 以外のもので to_str を定義することはあるでしょうか?この方法の実際的な応用例を教えていただけますか?

解決策

まず、これはすべて、Ruby の「短い」強制メソッド (例: to_s/to_i/to_a/to_h) と「長い」強制メソッド (例: to_str/to_int/to_ary/to_hash) の各ペアに (それぞれの型に対して) 適用されることに注意してください。それらはすべて同じセマンティクスを持ちます。

それらにはさまざまな意味があります。オブジェクトが単に文字列で表現できるのではなく、文字列のように動作する場合を除き、to_str を実装しないでください。 to_str を実装する唯一のコア クラスは String 自体です。

『Programming Ruby』より (このブログ投稿から引用。すべて読む価値があります):

Pickaxe の古い Ruby ドキュメントには次のように書かれています。

たとえば、Integer に加えて、Float と Numeric の両方が to_int (to_i の to_str に相当) を実装します。これは、どちらも簡単に Integer に置き換えることができるためです (実際にはすべて数値です)。クラスが String と同様に緊密な関係を持っていない限り、to_str を実装しないでください。