gpt4 book ai didi

ruby - Ruby 中的 bool 参数错误

转载 作者:太空宇宙 更新时间:2023-11-03 16:42:59 24 4
gpt4 key购买 nike

我正在研究 POODR 的第 8 章,将对象与组合相结合。但是,我似乎无法使示例工作:

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 Parts
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 do |part_config|
create_part(part_config)
end
)
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 时:

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

road_bike.spares.size 返回 3。这是我所期望的。但是,当我使用 mountain_config 时:

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_shock 中删除 false 以让它成为默认值 (true) , mountain_bike.spares.size 返回 4。

为什么 false 使 mountain_bike.spares.size 返回 3?我错过了什么?

最佳答案

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

def spares
select { |part| part.needs_spare }
end

该代码将返回需要备件的部件(即 needs_spare 为真)。 front_shock 配置中的 false 将其设置为 false。尝试将其他部分的 needs_spare 值设置为 false 以了解我的意思。

关于ruby - Ruby 中的 bool 参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40916839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com