to_sRuby の「短い」(例: / to_i/ to_a/ to_h) と「長い」(例: to_str/ to_int/ to_ary/ ) の強制メソッドの各ペアto_hash(それぞれの型について) には、すべて同じセマンティクスがあるため、これらすべてが適用されることに注意してください。
それらには異なる意味があります。オブジェクトが単に文字列で表現できるのではなく、文字列のように振る舞わto_strない限り、実装しないでください。実装する唯一のコア クラスは String 自体です。to_str
Programming Rubyから(すべて読む価値のあるこのブログ投稿から引用):
[to_iとto_s] は特に厳密ではありません: たとえば、オブジェクトが文字列として適切な表現を持っている場合、おそらくto_sメソッドを持っているでしょう... [to_intとto_str] は厳密な変換関数です: [your] オブジェクトが自然に変換できる場合にのみ実装します文字列または整数を使用できるすべての場所で使用できます。
つるはしの古い Ruby ドキュメントには、次のように書かれています。
to_sほとんどすべてのクラスでサポートされている とは異なり、to_str通常は文字列のように振る舞うクラスによってのみ実装されます。
たとえば、Integerに加えて、 FloatとNumericの両方がto_int(to_iに相当する) を実装to_strしています。これは、どちらも Integer を簡単に置き換えることができるためです (これらはすべて実際には数値です)。クラスが String と同様に密接な関係にない限り、 を実装しないでくださいto_str。