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

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

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

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

Q&A

解決済

2回答

1120閲覧

コードが調べても読めません

tsukacchan

総合スコア17

Ruby

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

0グッド

0クリップ

投稿2018/07/20 03:55

編集2018/07/20 04:02

Ruby

1class Library 22. def initialize 33. @books = [] 44. end 55. 66. def <<(book) 77. @books << book 88. end 99. 1010. def to_s 1111. puts "Library contents:" 1212. @books.join("\n") 1313. end 1414.end 1515. 1616.class Book 1717. attr_accessor :author, :title 1818. def initialize(args) 1919. @author = args[:author] 2020. @title = args[:title] 2121. args[:library] << self 2222. end 2323. 2424. def to_s 2525. "Title: " + @title + ", Author: " + @author 2626. end 2727.end 28 29コード

プログラミングを勉強中です
上のコードはある問題の模範解答なのですが、コードを見ても
理解することができません。
調べたのですが、わかりませんでした。
分からなかったところですが、2か所あります。

まず2行目
initializeについてですが
普通はinitialize()として何か値を受け取って
初期化をするのではないでしょうか?

6行目
def <<(book) 意味が分かりません。

def とあるので関数としか思いつかなかったのですが
bookは関数なのでしょうか?あと(book)の()も分かりません。
どなたかわかる方教えていただけないでしょうか?
よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

普通はinitialize()として何か値を受け取って

そんな決まりはありません。

def <<(book) 意味が分かりません。

演算子の再定義です

ruby

1 args[:library] << self

の部分で

ruby

1 args[:library].<<(self)

のようにメソッド呼び出しされます(呼び出してる部分ないので多分だけどね)

投稿2018/07/20 04:16

編集2018/07/20 04:24
asm

総合スコア15147

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

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

0

ベストアンサー

概ねasmさんの回答で正しいですがわかりやすく補足するならば

nitializeについてですが

普通はinitialize()として何か値を受け取って
初期化をするのではないでしょうか?

ruby

1def initialize(args) 2 args = [] 3end

とすれば、おっしゃっているような動きも可能です。

def <<(book) 意味が分かりません。

def とあるので関数としか思いつかなかったのですが
bookは関数なのでしょうか?あと(book)の()も分かりません。

(book)は引数であり、メソッド内のbookに値が反映されます。
<<(hoge)と書いた時にhogeがメソッド内のbookに代入されるって感じです。

ruby

1def <<(value) 2 @books << value 3end

と書いても全く同じです。()内の文字に特に意味はありません。

<<はレシーバの配列の末尾にオブジェクトを要素として追加するもので、実行内容の例を書くならば

ruby

1arr = ["a", "b", "c"] 2str = "d" 3arr << str 4p arr 5#=> ["a", "b", "c", "d"]

arr.push(str)みたいなものですね...と、こんな感じでしょうか...。

投稿2018/07/20 04:52

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問