Rational and Complex should be frozen
Since they basically are value types.
They also do not support #dup currently:
> 1r.dup TypeError: can't copy Rational from `initialize_copy' > 1i.dup TypeError: can't copy Complex from `initialize_copy'
Changing their value can only be considered a semantic bug.
So, let's follow true/false/nil/Integer/Float and friends?
Not sure what #6538 was about but I think Marshal can just freeze after setting the values.
It's slightly incompatible if people do rational.instance_variable_set(:@foo, 1) or so,
but no more than on other now-frozen Numeric types and this kind of code seems highly undesirable.
Updated by nobu (Nobuyoshi Nakada) about 6 years ago
- Status changed from Open to Closed