Hi,

In message "Re: redefineable not operator"
    on Mon, 10 Dec 2007 17:17:51 +0900, murphy <murphy / rubychan.de> writes:

|why such heavy syntax changes, two weaks before the release of Ruby
|1.9.1? I mean, I'm happy that changes are always possible here, but I
|thought 1.9 was fixed some time ago. it's really confusing for me, since
|I don't know any (English) website that's summarizing what's going on
|recently...
|
|so there is no 1.9-stable branch? no feature-fixed release candidates
|before 1.9.1?

As I said before we try our best to stabilize features before
Christmas.  1.9.1 on Christmas will not be as stable as you (or we)
expected.

|- it seems I can no longer rely on !x returning a boolean :(
|  how do I make my !!x hacks 1.9-compatible?

We don't encourage to redefine ! operator, unless you know what you
are going to do.

|- does it affect performance? reading the source, I assume that a != b
|  is now slower than a == b, because it does another funcall.

It does.  But eventually Koichi will prepare call avoidance unless
!/!= is redefined, I hope.

|- can someone give an example where it would be useful to redefine !,
|  != or !~?

For example,

  big_sized_narray.delete_if{|x| x != 0}

to invoke x.!= which creates C coded filter, to avoid evaluating a
block for each elements in the NArray.

|- when I tried it in irb, I got this. I have no idea what's happening.
|
|irb(main):001:0> def !; 42; end
|=> nil
|irb(main):002:0> public :!
|/usr/local/lib/ruby/1.9/irb/input-method.rb:100:in `gets': private
|method `!' called for false:FalseClass (NoMethodError)

Perhaps, you need to fetch again from the repository.

|I hope you make %...() and :: redefinable next ;)

They are fundamentally not redefinable, I think.

							matz.