I would support 1). Because of consistency.
For example,
defaults = NSUserDefaults.standardUserDefaults defaults.objectForKey('key').upcase!
It is intended to replace a string in the user defaults with upcase one. With auto-conversion, it would seem to work at a glance. But it won't change the string in the user defaults. Isn't it confusing?
Excellent sample, indeed. Modifications to the auto-converted object won't be reflected in the previous object.
I think we can live with 1), especially since it's very straightforward to work around by using a non-destructive method or creating a mutable copy. And all objects created from Ruby will be mutable anyway, so from a pure Ruby perspective there will not be any difference with the current implementation.
Definitely a great example, you convinced me immediately. So at least one user votes "yeah, throw an exception". I suggest though that: 1. Make a wiki entry about the issue. 2. Put link to wiki entry in the exception. But that's just me because I get tired of Googling for every exception so I can figure out what it means... Pierce