LoginSignup
1
1

More than 1 year has passed since last update.

to_s は数値を文字列化するメソッド,なのか?

Posted at

Ruby の初心者がお書きになった記事で,

to_s は数値を文字列にするメソッドです

と書かれているものを非常によく目にします。
確かに

3.to_s   # => "3"
0.1.to_s # => "0.1"

ですから,このメソッドは数値を文字列に変換しています。
にも関わらず引用した表現に引っかかりを感じるのは,数値以外のオブジェクトにも to_s メソッドが使えるからです。

{: 3, : 4}.to_s
# => "{:朝=>3, :暮=>4}"

Ruby に入門したての方は,

  • 同名のメソッドが複数のクラスやモジュールに定義されていることがある
  • そのうちのどのメソッドが呼び出されるかはレシーバーによって決まる

ということを早いうちに知っておかれるとよいと思います。

(メソッド呼び出しの)レシーバーというのは,上記のコードで言えばメソッド呼び出しの . の前に書かれているオブジェクトのことです。
一般には,メソッド呼び出しの . の前には式を書くことができ,その式を評価した結果として得られたオブジェクトがレシーバーとなります。たとえば,

(1 + 2).to_s

というコードであれば,「1 + 2 という式を評価して得られた 3 という Integer オブジェクト」が to_s メソッドのレシーバーになります。

Ruby の組込みクラスの場合,to_s はすべて「自身を表現する文字列オブジェクトを返す」という働きを持ちます。
どのように文字列表現を作るかはクラスごとに違っています。同じ数値クラスでも,Integer の to_s と Float の to_s は別のメソッドであり,前者が引数を取りうるのに対し,後者は引数を受け付けない,といった違いもあります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1