🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

Q&A

解決済

1回答

1760閲覧

rubyのオブジェクト(配列)に対してインスタンス変数を代入し、呼び出すことは可能ですか?

kogurekyousou

総合スコア6

Ruby

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

0グッド

2クリップ

投稿2019/09/09 08:26

ruby

1#menu.rb 2 3class Menu 4 attr_accessor :name 5 attr_accessor :price 6 7 def initialize(name:, price:) 8 self.name = name 9 self.price = price 10 end 11 12 def info 13 return "#{self.name} #{self.price}円" 14 end 15 16 def get_total_price(count) 17 total_price = self.price * count 18 if count >= 3 19 total_price -= 100 20 end 21 return total_price 22 end 23end 24

ruby

1#index.rb 2 3require "./menu" 4 5menu1 = Menu.new(name: "ピザ", price: 800) 6menu2 = Menu.new(name: "すし", price: 1000) 7menu3 = Menu.new(name: "コーラ", price: 300) 8menu4 = Menu.new(name: "お茶", price: 200) 9 10menus = [menu1, menu2, menu3, menu4] 11 12index = 0 13menus.each do |menu| 14 puts "#{index}. #{menu.info}" 15 index += 1 16end 17 18puts "--------------" 19puts "メニューの番号を選択してください" 20 21order=gets.chomp.to_i 22 23 24selected_menu=menus[order] 25 26 27puts "選択されたメニュー:#{selected_menu.name} 28" 29 30order=gets.chomp.to_i 31 32selected_menu=menus[order] 33 34puts "選択されたメニュー:#{selected_menu.name}" 35
コンソール 0.ピザ 800円 1.すし 1000円 2.コーラ 300円 -------------- メニューの番号を選択してください 3 選択されたメニュー:お茶

こちらのコードのindex.rbの最後の一行めの
「puts "選択されたメニュー:#{selected_menu.name}"」の結果
コンソールで
「選択されたメニュー:お茶」
と表示されるのはなぜですか?

この部分は、オブジェクトに対して、インスタンス変数を代入して、
文字を呼び出しているという解釈で良いのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

用語の使い方がちょっとずれているのでわかりにくい質問になってます。
インスタンス変数 ってmenus[order] もしくは menus のことを言ってますか? それはインスタンス変数ではないです。インスタンス変数は(rubyでは) @で始まる変数です。

オブジェクトって selected_menu のことを言ってますか?
間違いではないのですが、rubyでオブジェクト っていうと全てがオブジェクトなのでどういう意味で言っているのかわかりにくいです。

変数 selected_menu に、 変数/配列 menus の要素 を代入している
menusの3番めの要素は class Menu のインスタンス menu4 なので
selected_menu.name は menu4.name と同じ意味となる

ということで質問の答えになっていますか?

投稿2019/09/09 08:58

編集2019/09/09 09:00
winterboum

総合スコア23567

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

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

kogurekyousou

2019/09/10 02:45

わかりにくくてごめんなさい! 「puts  "選択されたメニュー:#{selected_menu.name}”」の selected_menu=オブジェクト、name=インスタンス変数と呼んでいました。 この部分というのは、#{selected_menu.name}の部分のことを言っていました。 お陰様で理解できました。こんなわかりづらい質問にも丁寧に、 回答してくださってありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問