gpt4 book ai didi

Ruby - 如何缩短我的方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:46:00 25 4
gpt4 key购买 nike

我这里有一个散列:

VALID_CHOICES = {
'r' => 'rock',
'p' => 'paper',
'sc' => 'scissors',
'l' => 'lizard',
'sp' => 'spock'
}

和这里基本比较的一个方法:

def win?(first, second)
(first == 'sc' && second == 'p') ||
(first == 'p' && second == 'r') ||
(first == 'r' && second == 'l') ||
(first == 'l' && second == 'sp') ||
(first == 'sp' && second == 'sc') ||
(first == 'sc' && second == 'l') ||
(first == 'l' && second == 'p') ||
(first == 'p' && second == 'sp') ||
(first == 'sp' && second == 'r') ||
(first == 'r' && second == 'sc')
end

我怎样才能用非常简短的代码重写我的方法,这些代码的含义完全相同?任何的想法?是否可以使用哈希来做到这一点?

最佳答案

您应该为每个 token 可以赢得什么定义明确的规则:

WINS = {
'r' => %w{l sc},
'p' => %w{r sp},
'sc' => %w{p l},
'l' => %w{p sp},
'sp' => %w{r sc}
}

现在您可以使用简单的查找来确定获胜:

def win?(first, second)
WINS[first].include?(second)
end

虽然可能有几种“聪明”的方法来避免像 WINS 这样的显式结构,但显式规则更容易理解 - 因此也更易于维护。代码简洁被认为是一个积极的属性,它提高了代码的可读性。简洁到极致导致代码难以理解,不是值得追求的。

关于Ruby - 如何缩短我的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460707/

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