to_s
Ruby の「短い」(例: / 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
。