Spy*_*ros 1 ruby ruby-on-rails
请看一下这段代码:
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
Run Code Online (Sandbox Code Playgroud)
这驻留在我已经创建的函数中,当我在Rails中执行它时,我得到一个"符号作为数组索引".我猜这是因为率=战士,率=魔术师或率=游侠的可能性.也许我必须使用克隆.
我的问题是,基于if比较选择哈希的更好方法是什么,做上述事情?
您正在创建Array一个条目,其中包含Hash:
fighter = [:str => 2, :dex => 3, :mag => 3, :acc => 2, :hp => 2]
=> [{:str=>2, :dex=>3, :mag=>3, :acc=>2, :hp=>2}]
Run Code Online (Sandbox Code Playgroud)
你打算做的只是创建一个Hash:
fighter = {:str => 2, :dex => 3, :mag => 3, :acc => 2, :hp => 2}
=> {:str=>2, :dex=>3, :mag=>3, :acc=>2, :hp=>2}
Run Code Online (Sandbox Code Playgroud)
另外,if使用case语句而不是三个语句:
rate = case user.first_class
when "ranger"
ranger
when "magician"
magician
when "fighter"
fighter
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |