Rubyでテストを試したらスクショのようなエラーが発生しました。
他のrbファイルで定義したものを main.rb
で実行しようとしました。
selfメソッドにしたり色々試したのですがエラーが直りません。(car.rb
中で @capacity
を self.capacity
に変更したり)
原因わかる方、ご教授いただけませんでしょうか?
【追記①】回答を参考に以下に直しましたが今度は NoMethodError
が発生しました。
こちらの原因お分かりでしょうか?
またソースコードも修正しました。
【追記②】
car.rb
に attr_accessor :capacity, :price, :speed
を追加して出力したら上手く行ったんですが、
以下のように「アクセル良好」、「ブレーキ良好」が二重に出力されてしまいます。
これは if __FILE__ == $0
を出力してるのが原因でしょうか?
=> car.rb を修正して解決済み
【追記③】アドバイスを元に何パターンか試しました。上手く行った部分もあるのですが出力の部分で苦戦してます。
・ require
と require_relative
両方で上手くいった
・ Dir[File.dirname(__FILE__) + '/*.rb'].each {|file| require file }
だとエラー発生
・ if __FILE__ == $0
だと上手く行くが puts
だとエラーがでる
追記③の質問
・if __FILE__ == $0
ではなく puts
で出力する方法はどうすればいいか?(もう if __FILE__ == $0
するもんだと覚える方がいいのか)
・ Dir[File.dirname(__FILE__) + '/*.rb'].each {|file| require file }
の正しい記述方法
お分かりであればお願いいたします。
↓こちらは上手くいった例
↓ if __FILE__ == $0
だと上手く行くが puts
だとエラーになった例
↓ require
ではなく Dir[File.dirname(__FILE__) + '/*.rb'].each {|file| require file }
だと失敗
【追記④】
Dir[File.dirname(__FILE__) + '*.rb'].sort.each {|file| require file }
ではなく
Dir[File.dirname(__FILE__) + '/*.rb'].sort.each {|file| require file }
でした。
これで実行すると下のスクショのように2度出力されてしまいます。
こちらの原因教えていただけますでしょうか?
File.join
にしてもエラーになる(これはsort.eachにしてないから)
File.join
と sort.each
を忘れずに書いても二重に出力されてしまいます
Ruby
1# main.rb 2# Your code here! 3require './car' 4require './ferrari' 5require './honda' 6require './nissan' 7 8def main 9 10cars = [] 11 cars << Honda.new(8, 100, 10) 12 cars << Nissan.new(5, 50, 10) 13 cars << Ferrari.new(2, 200, 100) 14 15 cars.each do |car| 16 puts " 定員:#{car.capacity}人 価格:#{car.price}円 加速:#{car.speed}km 機能:#{car.accel},#{car.brake} " 17 end 18end 19 20if __FILE__ == $0 21 main 22end 23 24
Ruby
1# car.rb 2class Car 3attr_accessor :capacity, :price, :speed 4 def initialize(capacity, price, speed) 5 @capacity = capacity 6 @price = price 7 @speed = speed 8 end 9 10 def accel 11 p "アクセル良好" 12 end 13 14 def brake 15 p "ブレーキ良好" 16 end 17end 18 19
Ruby
1# ferrari.rb 2class Ferrari < Car 3end
Ruby
1# honda.rb 2class Honda < Car 3end
Ruby
1# nissan.rb 2class Nissan < Car 3end
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。