gpt4 book ai didi

ruby - 尽管条件为真,但为什么我的案例陈述失败了?

转载 作者:数据小太阳 更新时间:2023-10-29 08:35:57 24 4
gpt4 key购买 nike

我正在研究一种根据五个六面骰子的作用计算分数的型。到目前为止,这是我的代码:

def score( dice )
points = []
score = {}
dice.each do |n|
if score.has_key?(n.to_s.to_sym)
score[n.to_s.to_sym] += 1
else
score[n.to_s.to_sym] = 1
end
end

score.each do |k,v|
key_int = k.to_s.to_i

case key_int
when key_int == 1 && (v == 3)
points << 1000
when key_int == 6 && (v == 3)
points << 600
when key_int == 5 && (v == 3)
points << 500
when key_int == 4 && (v == 3)
points << 400
when key_int == 3 && (v == 2)
points << 300
when key_int == 2 && (v == 3)
puts "did I get here"
points << 200
when key_int == 1 && (v < 3)
points << key_int * v
when key_int == 5 && (v < 3)
points << key_int * v
else
puts "Default"
end
end
points
end

puts score([2, 2, 2, 3, 3]) ==> 200

因此,在这个示例的基本层面上,发生的事情是当我的每个循环都遇到哈希时,我得到以下条件:

key_int == 2 && (v == 3)

并将其插入到 case 语句之前的代码中,我得到一个值 true但我从未达到points << 200的条件.为了简化,我将案例逻辑的代码缩减为这个。

score.each do |k,v|
key_int = k.to_s.to_i
case key_int
when key_int == 2
puts "I reached the condition"
else
puts "default"
end
end

我仍然得到默认值,但我从未达到 when健康)状况。这让我很困惑。我可能做错了什么?

最佳答案

如果您在 case 之后指定一个对象, 它将与每个 when 进行比较图案来自 pattern === object .

在这个例子中:

case key_int
when key_int == 2
# ...
end

它将比较key_int反对key_int == 2像这样:

(key_int == 2) === key_int

假设key_int2 ,上面变成:

true === 2

计算结果为 false .

使用 caseif-elsif 这样的表达表达式,你必须省略初始对象:

case
when key_int == 2
# ...
end

请参阅 case Expression 上的 Ruby 文档再举个例子。

关于ruby - 尽管条件为真,但为什么我的案例陈述失败了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40511824/

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