https://gihyo.jp/book/2017/978-4-7741-9397-7
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで
上記を用いrubyの基本を習得中です。
ruby 2.7.0です
150あるいは190円の切符をかい、改札から入場し、電車に乗って、改札から出場するプログラムです、さらにminitestを使ってtestも書いています。
ここで以下疑問点があります。
ruby
1def exit(ticket) 2 #なぜオブジェクト(レシーバ)を使わずにメソッドが呼び出せる? 3 fare = calc_fare(ticket) 4 fare <= ticket.fare 5 end
ruby
1calc_fare(ticket)
はなぜインスタンスを用いずに、メソッド呼び出しができているのでしょうか?
ruby
1class Gate 2 3 STATIONS = [:umeda, :juso, :mikuni] 4 FARES = [150, 190] 5 6 def initialize(name) 7 @name = name 8 end 9 10 def enter(ticket) 11 ticket.stamp(@name) 12 end 13 14 def exit(ticket) 15 #なぜオブジェクト(レシーバ)を使わずにメソッドが呼び出せる? 16 fare = calc_fare(ticket) 17 fare <= ticket.fare 18 end 19 20 def calc_fare(ticket) 21 from = STATIONS.index(ticket.stamped_at) 22 to = STATIONS.index(@name) 23 distance = to - from 24 FARES[distance - 1] 25 end
ruby
1class Ticket 2 3 attr_reader :fare, :stamped_at 4 5 def initialize(fare) 6 @fare = fare 7 end 8 9 def stamp(name) 10 @stamped_at = name 11 end 12 13end 14
ruby
1require 'minitest/autorun' 2require './lib/rgb' 3 4class RgbTest < Minitest::Test 5 6 def test_to_hex 7 assert_equal '#000000', to_hex(0, 0, 0) 8 assert_equal '#ffffff', to_hex(255, 255, 255) 9 assert_equal '#043c78', to_hex(4, 60, 120) 10 end 11 12 def test_to_ints 13 assert_equal [0, 0, 0], to_ints('#000000') 14 assert_equal [255, 255, 255], to_ints('#ffffff') 15 assert_equal [4, 60, 120], to_ints('#043c78') 16 end 17 18end 19
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/15 07:06
2020/08/15 08:09
2020/08/17 07:51