Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中的布尔参数错误_Ruby_Oop_Design Patterns_Composition - Fatal编程技术网

Ruby中的布尔参数错误

Ruby中的布尔参数错误,ruby,oop,design-patterns,composition,Ruby,Oop,Design Patterns,Composition,我正在写POODR的第8章,将物体与构图相结合。然而,我似乎无法让这个例子起作用: class Bicycle attr_reader :size, :parts def initialize(args = {}) @size = args[:size] @parts = args[:parts] end def spares parts.spares end end 当我使用道路配置时: road_config = [['chain

我正在写POODR的第8章,将物体与构图相结合。然而,我似乎无法让这个例子起作用:

class Bicycle
  attr_reader :size, :parts

  def initialize(args = {})
    @size  = args[:size]
    @parts = args[:parts]
  end

  def spares
    parts.spares
  end
end



当我使用
道路配置时

road_config =
  [['chain',        '10-speed'],
   ['tire_size',    '23'],
   ['tape_color',   'red']]

road_bike =
  Bicycle.new(
    size:  'L',
    parts: PartsFactory.build(road_config)
  )

p road_bike.spares.size
mountain_config =
  [['chain',        '10-speed'],
   ['tire_size',    '2.1'],
   ['front_shock',  'Manitou', false],
   ['rear_shock',   'Fox']]

mountain_bike =
  Bicycle.new(
    size:  'L',
    parts: PartsFactory.build(mountain_config)
  )

p mountain_bike.spares.size
road\u bike.spares.size
返回3。这正是我所期望的。但是,当我使用
mountain\u config
时:

road_config =
  [['chain',        '10-speed'],
   ['tire_size',    '23'],
   ['tape_color',   'red']]

road_bike =
  Bicycle.new(
    size:  'L',
    parts: PartsFactory.build(road_config)
  )

p road_bike.spares.size
mountain_config =
  [['chain',        '10-speed'],
   ['tire_size',    '2.1'],
   ['front_shock',  'Manitou', false],
   ['rear_shock',   'Fox']]

mountain_bike =
  Bicycle.new(
    size:  'L',
    parts: PartsFactory.build(mountain_config)
  )

p mountain_bike.spares.size
我本来希望看到4个,而不是3个。如果我从
front\u shock
中删除
false
,将其设置为默认值(
true
),则
山地自行车.备件.尺寸
返回4


为什么
false
makes
mountain\u bike.spares.size
return 3?我缺少什么?

因为它不需要备件-在您的备件类别中,您正在选择需要备件的备件:

def spares
  select { |part| part.needs_spare }
end
该代码将返回需要备件的零件(即
需要备件
为真)。
front\u shock
配置中的
false
将其设置为false。尝试将其他部件的
需要\u备件
值设置为false,以了解我的意思