On Monday, February 10, 2003, at 11:33 PM, ts wrote:

> pigeon% cat b.rb
> #!/usr/bin/ruby -Isrc
> require 'bdb'
> bdb = BDB::Btree.open("tmp/aa", nil, "w")
> bdb.set_partial(0, 2)
> if (bdb["blue"] = "XYZ") == bdb["blue"]
>    puts "OK #{bdb["blue"]}"
> end
> pigeon%
>

I see your point.  I guess maybe you're right.  It makes the most sense
if one adopts the policy of having assignment methods return the
result of the assignment.  I guess it's not ruby's job to prevent people
from shooting themselves in the foot if they don't want to do that.

FWIW. The case that got me thinking was

((a.b = 42) == a)

which does not seem clear.

Also I think it's easier to explain why

(bdb["blue"] = "XYZ") != bdb["blue"]

under the new behavior, than why

(bdb["blue"] = "XYZ") == bdb["blue"]

doesn't tell you anything about the value of bdb["blue"] under the old.

You'd still need to test that (bdb["blue"] == "XY") to know
that the assignment worked as expected.