我一直在通过将笔和纸 RPG 转换为脚本来使用 Ruby。
现在我有一个角色的统计数据保存在一个哈希中,我希望能够通过公共方法进行设置。我得到了这个工作:
class Character
attr_reader :str, :con, :dex, :wis, :int, :level, :mods, :stats
def initialize str, con, dex, wis, int, cha, level = 1
@stats = { :str => str, :con => con, :dex => dex, :wis => wis, :int => int, :cha => cha }
@mods = {}
@level = level
@stats.each_pair do |key, value|
@mods[key] = ((value / 2 ) -5).floor
end
end
def []=(index, value)
@stats[index] = value
end
end
这允许我实例化一个新角色,然后@stats
通过运行更新newChar.stats[:str] = 12
但是,我似乎也可以修改@mods
使用这种方法,这是不可取的。 newChar.mods[:str] = 15
将成功更改@mods
哈希值,据我了解,当前的 setter 方法不可能做到这一点。
另外一点,我用来创建@mods
哈希的迭代器看起来很笨重,但我没有找到更好的方法来完成这项任务。