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

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

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

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

1回答

585閲覧

Rubyでのオブジェクト指向設計実践ガイド コンポーズされたBicycleでのエラー

yodev21

総合スコア5

Ruby

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

0クリップ

投稿2020/04/16 08:46

編集2020/04/16 09:12

オブジェクト指向設計実践ガイド
Rubyでわかる進化し続ける柔軟なアプリケーションでの育て方を参考に学習しております。

第8章 コンポジションでオブジェクトを組み合わせる
8.4コンポーズされたBicycleのサンプルソースを実際に
自分のローカル端末上で動かしたところ下記エラーが発生しました。

PartsFactory.buildの引数はconfig, parts_class = Parts
と2つ存在するためそもそも動かないのではないのではないか?
と考えており、書籍を見直したりエラーコードで検索をしておりますが、
解決できておりません

お力を貸して頂けると助かります。宜しくお願い致します。

Traceback (most recent call last): 1: from bicycle.rb:65:in `<main>' bicycle.rb:32:in `build': uninitialized constant PartsFactory::Parts (NameError)

該当のソースコード

bycycle.rb

1class Bicycle 2 attr_reader :size, :parts 3 4 def initialize(args={}) 5 @size = args[:size] 6 @parts = args[:parts] 7 end 8 9 def spares 10 parts.spares 11 end 12end 13 14require 'forwardable' 15class Part 16 extend Forwardable 17 def_delegators :@parts, :size, :each 18 19 include Enumerable 20 21 def initialize(parts) 22 @parts = parts 23 end 24 25 def spares 26 select { |part| part.needs_spare } 27 end 28end 29 30require 'ostruct' 31module PartsFactory 32 def self.build(config, parts_class = Parts) 33 parts_class.new( 34 config.collect { |part_config| 35 create_part(part_config) 36 } 37 ) 38 end 39 40 def self.create_part(part_config) 41 OpenStruct.new( 42 name: part_config[0], 43 description: part_config[1], 44 needs_spare: part_config.fetch(2, true) 45 ) 46 end 47end 48 49road_config = [ 50 ['chain', '10-speed'], 51 ['tire_size', '23'], 52 ['tape_color', 'red'] 53 ] 54 55mountain_config = [ 56 ['chain', '10-speed'], 57 ['tire_size', '2.1'], 58 ['front_shock', 'Manitou', false], 59 ['rear_sshock', 'Fox'] 60 ] 61 62road_bike = 63 Bicycle.new( 64 size: 'L', 65 parts: PartsFactory.build(road_config) 66 )

バージョン情報

Rubyバージョン:ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin18]

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

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

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

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

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

dodox86

2020/04/16 09:54

> 「Rubyでわかる進化し続ける柔軟なアプリケーションでの育て方」 翻訳版の発行が若干古めのよう(2016年9月発売)ですが、本で推奨しているrubyバージョンと合っていますか? 本に記載のコードでエラーが起きるのは考えづらいですが、訂正箇所の該当などもありませんか? https://gihyo.jp/book/2016/978-4-7741-8361-9/support P.225 コードの15行目について、"Part"から"Parts"への訂正があります。 ※rubyに詳しいわけではないので気になったところのコメントのみです。
yodev21

2020/04/16 11:07

コメントありがとうございます!! 正誤表は見ておりませんでした。。。 こちら確認しPartsへと修正して実行確認したところ想定通り動きました! アドバイスありがとうございます!
dodox86

2020/04/16 11:44

当たりでしたか。直ってよかったです。
yodev21

2020/04/16 11:52

teratail初心者でベストアンサーにしたかったのですが、 質問への追記だとできないらしく 回答に、dodox86さんの内容で解決した旨記載させていただきました! アドバイスありがとうございました!
guest

回答1

0

自己解決

dodox86様からアドバイスをいただき解決いたしました

「Rubyでわかる進化し続ける柔軟なアプリケーションでの育て方」

翻訳版の発行が若干古めのよう(2016年9月発売)ですが、本で推奨しているrubyバージョンと合っていますか? 本に記載のコードでエラーが起きるのは考えづらいですが、訂正箇所の該当などもありませんか?
https://gihyo.jp/book/2016/978-4-7741-8361-9/support

P.225 コードの15行目について、"Part"から"Parts"への訂正があります。

※rubyに詳しいわけではないので気になったところのコメントのみです。

投稿2020/04/16 11:30

yodev21

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問