gpt4 book ai didi

ruby-on-rails - 根据比较在 ruby​​ 中选择哈希

转载 作者:太空宇宙 更新时间:2023-11-03 17:05:54 27 4
gpt4 key购买 nike

请看一下这段代码:

fighter =  [:str => 2, :dex => 3, :mag => 3, :acc => 2, :hp => 2]
ranger = [:str => 3, :dex => 2, :mag => 3, :acc => 2, :hp => 2]
magician = [:str => 3, :dex => 3, :mag => 2, :acc => 2, :hp => 2]
rate = Hash.new

if user.first_class == 'Fighter' then rate = fighter end
if user.first_class == 'Ranger' then rate = magician end
if user.first_class == 'Magician' then rate = ranger end

cost = Hash.new
cost[:str] = (user.strength_points + 1) * rate[:str]
cost[:dex] = (user.dexterity_points + 1) * rate[:dex]
cost[:mag] = (user.magic_points + 1) * rate[:mag]
cost[:acc] = (user.accuracy_points + 1) * rate[:acc]
cost[:hp] = (user.health_points + 1) * rate[:hp]
cost

这驻留在我创建的函数中,当我在 Rails 中执行它时,我得到一个“符号作为数组索引”。我猜这是因为 rate = fighter、rate = magician 或 rate = ranger 的可能性。也许我必须在上面使用克隆。

我的问题是,根据 if 比较选择哈希的更好方法是什么,执行上述操作?

最佳答案

您正在创建一个数组,其中一个条目是一个Hash:

fighter =  [:str => 2, :dex => 3, :mag => 3, :acc => 2, :hp => 2]
=> [{:str=>2, :dex=>3, :mag=>3, :acc=>2, :hp=>2}]

你想做的只是创建一个Hash:

fighter = {:str => 2, :dex => 3, :mag => 3, :acc => 2, :hp => 2}
=> {:str=>2, :dex=>3, :mag=>3, :acc=>2, :hp=>2}

此外,不要使用三个 if 语句,而是使用一个 case 语句:

rate = case user.first_class
when "ranger"
ranger
when "magician"
magician
when "fighter"
fighter
end

关于ruby-on-rails - 根据比较在 ruby​​ 中选择哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5287270/

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