Напишите не унаследованный класс и используйте method_missing
для вызова всех функций из переменной экземпляра, ограничьте возвращаемое значение.
class MyNum
instance_methods.each {|m| eval("undef " << m) }
def initialize(fixnum)
@num = fixnum
end
def method_missing(name, *args, &blk)
ret = @num.__send__(name, *args, &blk)
Numeric === ret ? MyNum.new([[ret, 0].max, 255].min) : ret
rescue NoMethodError
super
end
def inspect
"MyNum(#{@num.inspect})"
end
def class
MyNum
end
end
int = MyNum.new(50) # => MyNum(50)
int += 52 # => MyNum(102)
int.succ # => MyNum(103)
int + 300 # => MyNum(255)
int = -int # => MyNum(0)
int.zero? # => true
int == 0 # => true