From: Robert Klemme Date: 2007-12-28T08:04:58+09:00 Subject: Re: Add Array#first= and Array#last= to std lib On 27.12.2007 20:15, MonkeeSage wrote: > On Dec 27, 12:52 pm, Trans wrote: >> On Dec 27, 12:54 pm, MonkeeSage wrote: >> >> >> >>> On Dec 27, 9:55 am, Sebastian Hungerecker >>> wrote: >>>> George wrote: >>>>> What would you expect this to do? >>>>> [].last = 1 >>>> The same thing as "[][-1] = 1", I'd imagine. >>>> The problem I'm seeing would be this: If you allow arr.last = x, you'd also >>>> have to allow arr.last(n) = x if you want to be consistent, but that's not >>>> syntactically possible. >>>> -- >>>> NP: Katatonia - Endtime >>>> Jabber: sep...@jabber.org >>>> ICQ: 205544826 >>> Agree. It's tempting to treat #first / #last as 0 / -1, but in >>> actuality they are method calls and simply return a value; they don't >>> subscript an array. Setting #last is not semantically different than >>> [1,2,3].pop = 4, it's just that #last is just a bit more subtle. >> I don't see what you are getting at here. #pop is destructive, #last >> is not. What does #last return when it is called? It returns a >> reference to the last element. So why would #last= do anything other >> then set the reference of the last element? Seems obvious to me. So we >> can't do last(n) = x, due to syntax constraints, oh well. It would >> still be convenient to have the obvious n=1, no arg case. I find that >> my programs are usually easier to read when I can use words rather non- >> alphabetic symbols. >> >> T. > > IOW, #pop returns a value, and this is just what #last does. One could > argue that #last and #[-1] *should be* synonymous (which may be the > point of the proposal); but as it currently stands, #last means the > same thing as `def l(a); a[-1]; end` so it makes no sense to have a > setter for it. This is getting weirder and weirder. I do not follow your argument here at all. If you say that #last is synonymous to [-1] then it would make even more sense to make #last= synonymous to [-1]=. > Unless the semantics change, (to me at least) it is non- > sense to have #last=. It's the same as a.pop = 3. Definitively not, as has been pointed out: pop is destructive, last is not. robert