[#796] Re: value of assignment (Re: Order of the value of an expression changed? (PR#579)) — Sean Chittenden <sean@...>
> sean@chittenden.org wrote:
Hi,
> |I have read the thread and I think this is a pretty bad change. I
Hi,
> > #BEGIN test.rb
Hi,
Hi --
Hi,
Hi --
Hi,
Hi,
Hi,
what about if attr_accessor :foo defined three methods - #foo, #foo=, and
> |What was wrong with having the receiver set the return value though?
Sean Chittenden <sean@chittenden.org> writes:
> > f = Foo.new()
>>>>> "J" == J Herre <jlst@gettysgroup.com> writes:
On 11 Feb 2003 at 11:13, Sean Chittenden wrote:
[#801] class of $1, $2 in 1.8.0 — dblack@...
Hi --
Hi,
Hi --
Hi,
Hi --
J.Herre <jlst@gettysgroup.com> writes:
Hi --
On Sat, 8 Feb 2003 06:52:17 +0900
Hi --
On Friday, February 7, 2003, at 03:15 PM, dblack@candle.superlink.net
[#851] Alternate GC ? — Mathieu Bouchard <matju@...>
[#875] OpenSSL for Ruby 0.2.0-pre0 — Michal Rokos <michal@...>
Hi everybody!
[#889] Bob Jenkins' hashing implementation in Ruby — Mauricio Fern疣dez <batsman.geo@...>
>>>>> "M" == Mauricio Fern疣dez <Mauricio> writes:
On Sat, Mar 01, 2003 at 08:42:40PM +0900, ts wrote:
>>>>> "M" == Mauricio Fern疣dez <Mauricio> writes:
On Sat, Mar 01, 2003 at 10:03:47PM +0900, ts wrote:
>>>>> "M" == Mauricio Fern疣dez <Mauricio> writes:
On Sat, Mar 01, 2003 at 10:10:35PM +0900, ts wrote:
Hi,
[#890] String and (repost) MemLeak — Michal Rokos <michal@...>
Hi,
Hi,
Hi,
Hi,
Hi,
Re: value of assignment (Re: Order of the value of an expression changed? (PR#579))
> sean@chittenden.org wrote: > > dblack pointed out a better test case to use: > > > > # Begin > > class Foo > > def a=(b) > > return(4) > > end > > end > > > > f = Foo.new > > p f.a = 5 > > p f.a = 10000 > > # end > > > > Any ideas? The output is: > > > > 5 > > 10000 > > It's a recent change. See the thread from [ruby-core:644]. > > Now an assignment expression always return the assigned value, > regardless its implementation. I have read the thread and I think this is a pretty bad change. I can't find an instance where this would be the desired result. When every other expression in Ruby evaluates from right to left, why do assignment statements always have a value of the right most value? This breaks some of my unit tests with what I can only describe as a "unique feature" that only Ruby has. :-/ Here's a practical example from libxml. libxml uses zlib for compressing XML documents. If you assign a value to XML::Document#compression that is greater than 9, or less than 0, the value used for the compression is set to either 9 or 0, respectively. Therefore, in my unit tests I do: assert_equal(0, doc.compression = -5) assert_equal(9, doc.compression = 100000) But with the way that things are now, I have to do the following: assert_equal(-5, doc.compression = -5) assert_equal(0, doc.compression) assert_equal(1000, doc.compression = 1000) assert_equal(9, doc.compression) Which seems very counter intuitive. If = is method (=()), then the return value of the method should be determined by the =() method and not by the virtue that = is an assignment operator. Remember, from the example above that f.a = 5 is the same as writing f.a=(5). I expect the f.a=() method to return whatever value f.a=() returns and not that it will always default to the value being passed in. Is there any chance this behavior can be reviewed further? -sc -- Sean Chittenden