

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

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

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

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

[code]

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

[code]

    class Bicycle
      attr_reader :size, :parts
    
      def initialize(args={})
        @size = args[:size]
        @parts = args[:parts]
      end
    
      def spares
        parts.spares
      end
    end
    
    require 'forwardable'
    class Part
      extend Forwardable
      def_delegators :@parts, :size, :each
    
      include Enumerable
    
      def initialize(parts)
        @parts = parts
      end
    
      def spares
        select { |part| part.needs_spare }
      end
    end
    
    require 'ostruct'
    module PartsFactory
      def self.build(config, parts_class = Parts)
        parts_class.new(
          config.collect { |part_config|
            create_part(part_config)
          }
        )
      end
    
      def self.create_part(part_config)
        OpenStruct.new(
          name: part_config[0],
          description: part_config[1],
          needs_spare: part_config.fetch(2, true)
        )
      end
    end
    
    road_config = [
                    ['chain', '10-speed'],
                    ['tire_size', '23'],
                    ['tape_color', 'red']
                  ]
    
    mountain_config = [
                        ['chain', '10-speed'],
                        ['tire_size', '2.1'],
                        ['front_shock', 'Manitou', false],
                        ['rear_sshock', 'Fox']
                      ]
    
    road_bike = 
      Bicycle.new(
        size: 'L',
        parts: PartsFactory.build(road_config)
      )
    
[/code]

バージョン情報  
Rubyバージョン：ruby 2.6.5p114


CC BY-SA 4.0
2020-04-16T09:23:31.247
65680
2020-04-16T11:34:50.617
39658
question
ruby
Rubyでのオブジェクト指向設計実践ガイド コンポーズされたBicycleでのエラー


pompopoさんのアドバイスで解決いたしました！

> Parts クラスが見つからないよ、というエラーですね。15行目で宣言してるクラス名が Part になってるので、そこを Parts
> に変えれば大丈夫だと思います – pompopo


CC BY-SA 4.0
2020-04-16T11:34:50.617
65683
2020-04-16T11:34:50.617
39658
65680
answer