On Dec 4, 7:00 am, "David A. Black" <dbl... / rubypal.com> wrote:
> Hi --
>
> On Tue, 4 Dec 2007, MonkeeSage wrote:
> > On Dec 4, 3:02 am, "David A. Black" <dbl... / rubypal.com> wrote:
>
> >> They inherently change their receivers, but that's a separate matter
> >> from the !.
>
> > Well...99% of the time it is, except when the ! only serves to
> > indicate that it operates in-place (String#reverse!, Hash#update!, and
> > probably a few others I can't think of offhand*). That's why I
> > characterized the ! as "either-or-both" regarding in-place/dangerous.
>
> I'm not sure I follow, so this may not be relevant, but in-place
> changes (changes to the receiver) are one form of "danger", in this
> sense. They're just not the only form.

Don't mind me, I'm just over-analyzing. ;P After remaking that
"danger" can be ambiguous above, I posted a characterization of !
where I tried to disambiguate "danger" in the following way: "Causes
some side-effect that is incompatible or sufficiently different from
the non-bang version". Since everything is "dangerous" in ruby from
the perspective of a haskeller, I thought it might be helpful to
differentiate between mutation of the receiver (not generally
considered dangerous in ruby), and incompatible/unexpected behavior as
compared to the non-bang version. Most bang-methods, I think, do both.

> > Even if it's not a good idea or breaks with the common usage, it is
> > used that way at least a few times in stdlib.
>
> I don't know of any that don't come in pairs, where the ! one
> indicates "danger" (reverse/reverse!, exit/exit!, etc.).

I agree. That was one of my reasons for not supporting "push!" --
along with the fact that the method name is fully descriptive, and
that a ! suffix would be confusing, it would be unbalanced (q.v.,
previous post).

> > * Oh yeah, and I just remembered #power! (on Bignum I think) which
> > isn't dangerous and doesn't modify the receiver...it just raises to a
> > power. Where the heck did the bang come from?!
>
> Good question. I see this in ri but I don't see it actually on any
> objects. I'm not sure what it is.

It appears to be an alias of an alias (power! -> ** -> rpower).
Bignum#rpower returns a new Rational, so, indeed, the operation is non-
dangerous and does not mutate the receiver...I guess matz just had an
extra "!" lying around and didn't want to waste it, heh. ;)

> David
>
> --
> Upcoming training by David A. Black/Ruby Power and Light, LLC:
>     * Intro to Rails, London, UK, December 3-6 (by Skills Matter)
> Seehttp://www.rubypal.comfor details and 2008 announcements!

Regards,
Jordan