gpt4 book ai didi

ruby-on-rails - 基于 bool 标志气味的分类?如何清理它?

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

我们这里有一段代码可以根据一些 bool 标志来确定分配的类别。作者把它布置得像一张 table ,但最终却让其他人看起来很不协调。然而,我们都不知道如何使这段代码更优雅,同时看起来仍然很有条理。

有什么建议吗?我们想摆脱这种怪物。

category =

!optional && !taken && !active ? "obligatory overdue" :
!optional && !taken && active ? "obligatory fresh" :
!optional && taken && active && !cooldown && !locked ? "obligatory taken" :
optional && !taken ? "optional fresh" :
optional && taken && !cooldown ? "optional taken" :
!optional && taken && !active && !cooldown ? "optional taken" :
!optional && taken && active && cooldown && !locked ? "cooldown" :
optional && taken && cooldown ? "cooldown" :
!optional && taken && !active && cooldown ? "cooldown" :
!optional && taken && active && locked ? "locked" : []

最佳答案

您可以在常量 中定义类别“表”,并在其中保留标志逻辑,例如:

CATEGORIES = {
"obligatory overdue" => [
{ optional: false, taken: false, active: false, cooldown: nil, locked: nil }
],
"obligatory fresh" => [
{ optional: false, taken: false, active: true, cooldown: nil, locked: nil }
],
"obligatory taken" => [
{ optional: false, taken: true, active: true, cooldown: false, locked: false }
],
"optional fresh" => [
{ optional: true, taken: false, active: nil, cooldown: nil, locked: nil }
],
"optional taken" => [
{ optional: true, taken: true, active: nil, cooldown: false, locked: nil },
{ optional: false, taken: true, active: false, cooldown: false, locked: nil }
],
"cooldown" => [
{ optional: false, taken: true, active: true, cooldown: true, locked: false },
{ optional: true, taken: true, active: nil, cooldown: true, locked: nil },
{ optional: false, taken: true, active: false, cooldown: true, locked: nil }
],
"locked" => [
{ optional: false, taken: true, active: true, cooldown: nil, locked: true }
],
}

然后创建一个方法来在 CATEGORIES 中搜索正确的类别:

def set_category(flags)
CATEGORIES.find { |k, v| v.include?(flags) }&.[](0)
end

最后,不要将标志设置为多个变量,而是将它们设置在 Hash 中,如下所示:

flags = {
optional: false,
taken: false,
active: true,
cooldown: nil,
locked: nil
}

现在您可以通过将 flags 作为参数调用 set_category 来设置正确的类别:

category = set_category(flags)
#=> "obligatory fresh"

我认为对于要设置的特定类别,哪些标志需要为 true/false 不太明显,并且需要更多代码,但它是一个替代方案,如果你不喜欢你目前的做法。

关于ruby-on-rails - 基于 bool 标志气味的分类?如何清理它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43558777/

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