Hi --

On Mon, 20 Sep 2004, Jani Monoses wrote:

> Robert Klemme wrote:
> 
> >"Jani Monoses" <jani / iv.ro> schrieb im Newsbeitrag
> >news:414EC550.2040700 / iv.ro...
> >  
> >
> >>Hello
> >>
> >>what is the criterion for methods to have a ! terminated variant in the
> >>standard ruby APIs?
> >>For instance in String strip has a receiver-modifying counterpart but
> >>ljust does not.
> >>Is it that the result fits in the same memory? (strip returns a string
> >>at most as long as the original while just can return a much longer one)
> >>    
> >>
> >
> >Normally the rule is that the method modifies the current instance as
> >opposed to the creation of a new instance (e.g. String#gsub! and
> >String#gsub).  But that convention is not followed consistently in the std
> >lib.   I guess the explanatory text contains "historic reasons" somewhere.
> >:-}
> >
> >  
> >
> maybe it was my bad wording ;) I know that ! versions modify in place 
> (scheme heritage?)
> I was asking which methods should have a ! variant along the regular one.
> We have sub and sub!, strip and strip! but no String#just! only String#just
> Does in-place imply then that  no memory allocation will be done and the 
> result must fit in the calling object?

No:

  "a".sub!(/a/, "aaaaaaaaaaaaaaaaaaaaaaaaaa")


David

-- 
David A. Black
dblack / wobblini.net