Yes, indeed. I'd expect <something>.abs to return a positive value.
1.abs#=> 1-1.abs#=> 1i=1i.abs#=> 1-i.abs#=> -1 <- not what I'd expect
Likewise:
i=1-1.succ#=> 0-i.succ#=> -2 <- not what I'd expect
And a really weird one:
i=1-i.to_s#=> "1" <- this is a frozen string
Again, I perfectly understand why this is happening and how to avoid it. I just don't think this is the way it should be, nor do I see why it could be preferable.
A programmer who knows -i.abs is evaluated as -(i.abs) can get an expected result. As a note, - in -1 is not an operator, so -1.abs == (-1).abs == 1. -i.to_s is also explained in the same way.
I agree that the behavior may be confusing for beginners.