67

私はRubyを学んでおり、特にto_svs to_str(および同様にto_i/ to_intto_a/ to_ary、 & to_h/ to_hash)、少し混乱しているいくつかのメソッドを見てきました。私が読んだことは、短い形式 (例: to_s) は明示的な変換用であり、長い形式は暗黙的な変換用であると説明しています。

実際にどのように使用されるかはよくわかりませんto_str。String 以外のものを定義することはありますto_strか? この方法の実用的なアプリケーションを教えてください。

4

3 に答える 3

81

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


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

Programming Rubyから(すべて読む価値のあるこのブログ投稿から引用):

[to_ito_s] は特に厳密ではありません: たとえば、オブジェクトが文字列として適切な表現を持っている場合、おそらくto_sメソッドを持っているでしょう... [to_intto_str] は厳密な変換関数です: [your] オブジェクトが自然に変換できる場合にのみ実装します文字列または整数を使用できるすべての場所で使用できます。

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

to_sほとんどすべてのクラスでサポートされている とは異なり、to_str通常は文字列のように振る舞うクラスによってのみ実装されます。

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

于 2012-06-24T23:55:04.233 に答える