Seebs wrote: > This turns out not to quite be the case, in experiments. If I do that, > it works most of the time, but as an example: > john.str + john.dex + john.con > doesn't work, because it can't figure out that ANY of them should be > integers. ISTM that you are over-complicating. str, dex and con are individual attributes of the character and can be just Fixnums. If you want the whole combined set of attributes to act as an integer with a single value then that's straightforward to arrange. class Stats attr_accessor :str, :dex, :con def initialize(str, dex, con) @str, @dex, @con = str, dex, con end def to_int str + dex + con end def to_s to_int.to_s end def method_missing(*args) to_int.send(*args) end end ogre = Stats.new(16,3,2) elf = Stats.new(5,15,3) puts ogre < elf # => true puts elf - ogre # => 2 puts "Argh!" if ogre + rand(6) < elf # => sometimes This is the solution I posted before - what's the problem with it? You said you wanted to remember things like the highest str and be able to restore it. So just include that state too. class Stats attr_accessor :str, :dex, :con def initialize(str, dex, con) @str, @dex, @con = str, dex, con @max_str, @max_dex, @max_con = str, dex, con end def str=(x) @str=x @max_str=x if x > @max_str end def restore_strength @str = @max_str end def to_int str + dex + con end def to_s to_int.to_s end def method_missing(*args) to_int.send(*args) end end ogre = Stats.new(16,3,2) puts ogre # => 21 ogre.str = 4 puts ogre # => 9 ogre.restore_strength puts ogre # => 21 Sure, there's some duplication involved if you repeat this for individual stats. Is that a problem? Use a bit of metaprogramming to save the typing. Or, your Stats object could include a Hash with the individual attributes, which would be extensible. ogre.get(:str) # or ogre[:str] ogre.set(:str, 12) # or ogre[:str] = 12 ogre.max(:str) ogre.restore(:str) -- Posted via http://www.ruby-forum.com/.