質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

522閲覧

rubyの<<()メソッドについて

kohekoh

総合スコア140

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/06/09 07:32

ruby初心者です

以下のリンク先の問題の解答が理解できません。
Rubyがミニツク

まず<<()メソッドが
調べてもいまいち検索に引っかかってくれないので
理解ができません

to_sメソッドを定義してあると思うのですが
実行時にこのメソッドをよびだしていない、他クラスが呼び出している感じもないのに
実行されて、文字列が出力されていることがよくわかりません

御教授お願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

<< は配列の最後に要素を追加するメソッドです。

to_sが呼び出されていないのに、文字列が生成されるのは、putsが内部で引数のto_sを呼んでいるからです。
上記のサイトのコードで

puts my_library

がありますので、my_libraryto_sメソッドを呼び出したあと、その文字列をコンソールに表示しています。

https://ref.xaio.jp/ruby/classes/kernel/puts

投稿2019/06/09 07:45

tkt989

総合スコア118

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kohekoh

2019/06/09 10:29

返信ありがとうございます @book配列にbookが追加されるのはわかったのですが そもそも<<(book)のメソッドはどこでよばれているのですか? また、to_sメソッドはオーバーライドしているという認識であってますか? オーバーライドされたto_sメソッドが呼ばれたという感じですかね
otn

2019/06/09 11:56

> そもそも<<(book)のメソッドはどこでよばれているのですか? args[:library] << self ですね。
tkt989

2019/06/09 12:25

> そもそも<<(book)のメソッドはどこでよばれているのですか? otn さんのコメントの通り args[:library] << self で呼ばれています。 一見するとメソッド呼び出しに見えないかもしれませんが、 '<<(book)' メソッドを呼び出している意味になります。 rubyでは演算子を再定義できるのです。 > また、to_sメソッドはオーバーライドしているという認識であってますか? はい、その認識であってます。 リンク先の例でいうと、puts の引数はLibraryなので、Libraryの to_s メソッドが呼び出されます。
kohekoh

2019/06/09 13:15

なるほどです! ありがとうございます!
guest

0

実行時にこのメソッドをよびだしていない、他クラスが呼び出している感じもないのに

いえ、putsは引数が文字列でない場合、自動でto_sを呼び出します(るりま)。

投稿2019/06/09 07:41

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kohekoh

2019/06/09 13:15

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問