プロを目指す人のためのRuby入門という本の電車の改札プログラムなのですが、
privateメソッドの、
to = STATIONS.index(@name)
の引数にある**(@name)には、:mikuni**が入っていますが何故なのかわかりません。
以下が、全コードになります。
#チケットを表すクラス class Ticket attr_reader :fare, :stampd_at def initialize(fare) @fare = fare end def stamp(name) @stampd_at = name end end ticket = Ticket.new(150) # 改札機を表すクラス class Gate STATIONS = [:umeda, :juso, :mikuni] FARES = [150, 190] def initialize(name) @name = name end def enter(ticket) ticket.stamp(@name) end # 改札機を通って駅から出場する def exit(ticket) fare = calc_fare(ticket) fare <= ticket.fare end private def calc_fare(ticket) from = STATIONS.index(ticket.stamped_at) to = STATIONS.index(@name) distance = to - from FARES[distance - 1] end end umeda = Gate.new(:umeda) mikuni = Gate.new(:mikuni) umeda.enter(ticket) mikuni.exit(ticket)
一番下にある、
mikuni.exit(ticket)
で、 **.exit(ticket)と呼び出すと、.exit(ticket)**メソッドは、自身のメソッドの中で、**calc_fare(ticket)を呼び出しているから、
呼び出されるcalc_fare(ticket)**も、インスタンスmikuniのインスタンス変数を引き継いでいるということですか?
流れがいまいちよく分からなくてご教授いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/19 14:41