On Mon, 23 Aug 2004 16:20:55 +0900, Robert Klemme <bob.news / gmx.net> wrote: > "Austin Ziegler" <halostatue / gmail.com> schrieb im Newsbeitrag > news:9e7db911040822170976892f3b / mail.gmail.com... > > > Yet another alternative is to add an optional parameter in all cases. > > String#gsub currently expects a regexp and a replace pattern OR a > > regexp and a block. #gsub could be modified such that when it gets a > > regexp, a "boolean", and a block, it yields something different. This > > could be, for example: > > Adding a flag to change method behavior is usually regarded bad OO practice. > The usual solution is to have two different methods - one for each behavior. > That increases modularity, simplifies the implementation and improves > performance. > > I'd rather have String#gsub_md, String#gsub_md! and String#scan_md than the > flag although I have to admit that those method names are ugly. [Note: I'm continuing the discussion here, because RCR276 seems to have some data disappearing on a regular basis. David, if you're generating rdiffs for the Wiki discussion, it might be nice if you could send me a .tar.gz of the rdiff associated with RCR276 so that I can see if my changes are making it in the first place.] I agree that the presence of the flag may not be ideal, but note that #gsub already uses such conditional work -- and not having the flag would actually cause unnecessary code duplication (per the C code above). Right now, it accepts #gsub(patt, repl) or #gsub(patt, repl) { repl-block }; this would extend the capability to include #gsub(patt, repl-type) { repl-block }, the repl-type determining what is yielded. Again: this is entirely about the yielded value. I believe that all forms are correct for how they work when they don't use a block. The idea of having #gsub with the flag (as opposed to the #gsubm [the name I had chosen instead of #gsub_md) form which I rejected in writing my response to Nobu) is that IMO we should encourage the use of the new form with MatchData objects, not the other form. By using #gsubm, we discourage the use of the new form in favour of the old form. The only way that I think that this would really work is to have #gsub yield MatchData and #gsubs yield Strings, if we take that approach. --AustinZiegler -- Austin Ziegler * halostatue / gmail.com * Alternate: austin / halostatue.ca