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

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

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

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

Q&A

解決済

1回答

1938閲覧

インスタンス変数のクラス間での表示方法

2019

総合スコア9

Ruby

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

0グッド

0クリップ

投稿2020/03/19 09:21

編集2020/03/19 09:23

「プロを目指す人のためのRuby入門」を読んでおり、改札機プログラムを作成する際に、GateクラスとTicketクラスを作成しております。その間でのインスタンス変数(@stamped_at)の受け渡しについて、教えていただけますでしょうか。

ticket = Ticket.new(梅田)
で、インスタンスを作成し、
stampメソッドを呼び出した際に、
@stamped_at = 梅田
となります。

この変数をGateクラスのcalc_fareメソッドの引数とする際に、
ticket.stamped_at
と書かれておりますが、メソッドを呼び出す際に、
「ticket.変数名」 → 「ticket.@stamp_at」
ではないのかなと思っていたのですが、
なぜ、上記のような書き方になるのでしょうか。

初歩的な質問で恐れ入りますが、ご教授いただけますでしょうか。

<該当コード>

・Ticketクラス

class Ticket attr_reader :fare, :stamped_at def initialize(fare) @fare = fare end def stamp(name) @stamped_at = name  ←ここで定義した@stamped_at end end

・Gateクラス

class Gate STATIONS =[:umeda, :juso, :mikuni] FARES =[150,190] def exit(ticket) fare = calc_fare(ticket) fare <= ticket.fare end def calc_fare(ticket) from = STATIONS.index(ticket.stamped_at) ←ここだと、stamped_at to = STATIONS.index(@name) distance = to - from FARES[distance - 1] end end

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

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

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

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

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

guest

回答1

0

ベストアンサー

「ticket.変数名」 → 「ticket.@stamp_at」ではないのかなと思っていたのですが、

Rubyでは、@で始まるメソッドは作れません。

attr_reader :fare, :stamped_atは、「@fareの値を返すfareメソッド」と「@stamped_atの値を返すstamped_atメソッド」の2つの宣言を簡単に書くための記法です。

投稿2020/03/19 09:24

maisumakun

総合スコア146018

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

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

2019

2020/03/19 09:33

`attr_reader` で、`@stamped_at`を`stamped_at`と定義しているからだったんですね! ありがとうございます!
jnchito

2020/03/20 00:27

こんにちは。「プロを目指す人のためのRuby入門」の著者の伊藤です。拙著を読んでいただき、どうもありがとうございます!参考情報ですが、質問されていた内容は本書の7.3.3項に書いてある「インスタンス変数はクラスの外部から参照することができません。もし参照したい場合は参照用のメソッドを作る必要があります。」のあたりで説明していますので、そちらも一度ご確認ください????
2019

2020/03/20 04:49

補足頂きありがとうございます!参照用メソッドの必要性について理解半分で進めてしまっておりました。改めて復習しつつ、進めていきたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問