【发布时间】:2023-03-24 22:40:01
【问题描述】:
我从用户那里获取值,将它们作为属性存储在对象中,然后将它们存储在数组中。该数组由以下内容组成:
[
#<Tender:0x0000000001edc870 @company_name="a", @cost=20, @note="dfgv", @rejection_reason="", @status="open">,
#<Tender:0x0000000001edb088 @company_name="b", @cost=15, @note="dfg", @rejection_reason="", @status="open">
]
我有两种方法:accept_tender 和 reject_tender。 reject_tender 将 'rejected' 存储在 @status 中。 accept_tender 将 'accepted' 存储在 @status 中。输出将是这样的:
Companies Cost Status Reason for rejection
AA 240000 rejected cost is high
BB 200000 accepted
CC 230000 closed
一旦调用accept 方法,第三个状态将更改为'closed'。 accept方法的代码如下:
def accept_tender
project_data = find_project
if project_data.nil?
puts 'No such project'
else
minimum_cost = @tender_management.tenders.map { |tender| tender.cost }.min
company_data = @tender_management.tenders.map { |tender| [tender.company_name, tender.cost] }.flatten!
company_name = company_data [company_data.index(minimum_cost) - 1]
puts "Selected tender is of cost #{minimum_cost} of company #{company_name}"
update_status
Menu.show_menu(self)
end
end
def update_status
@tender_management.tenders.find { |tender|
tender.status = 'accepted' if tender.status == 'open'
}
@tender_management.tenders.find { |tender|
tender.status = 'closed' if tender.status == 'open'
}
end
我使用find 方法找到第一个状态'open',然后将其更改为'accepted'。完成此操作后,所有剩余的'open' 状态应更改为'closed'。除了使用find,还有其他方法吗?
【问题讨论】:
-
当前代码有什么问题?它的行为是否不正确?或者只是对可能的
find替换的学术兴趣? -
没有给定的代码正常工作。我只是 Ruby 的新手,因此想探索更多方法。有没有替代品?
-
如果您的意图是将所有剩余的“打开”状态更改为“关闭”,您可能不应该在
update_status的第二个块中使用find,对吧?这不是只更新下一个“打开”状态,而不是 all 吗?您可以在这里使用each而不是find。