2
我正在研究基于五个六面死的角色来计分的卡塔。这是我到目前为止的代码:尽管条件成立,为什么我的病例陈述失败?
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)
并将其插入到案例陈述之前的代码,我得到的值为true
,但我从未达到points << 200
的条件。为了简化,我把这个代码削减为case逻辑。
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'而不是'case key_int'。 – Stefan
我错过了什么吗?这个博客告诉我,否则http://blog.honeybadger.io/rubys-case-statement-advanced-techniques/ –
博客文章使用lambda和自定义matcher类通过'=='和'<'进行比较。 – Stefan