Re: set myList to myList & ...(Applescript-users Digest, Vol 2, Issue 489)
Re: set myList to myList & ...(Applescript-users Digest, Vol 2, Issue 489)
- Subject: Re: set myList to myList & ...(Applescript-users Digest, Vol 2, Issue 489)
- From: Paul Berkowitz <email@hidden>
- Date: Tue, 26 Jul 2005 18:39:43 -0700
- Thread-topic: set myList to myList & ...(Applescript-users Digest, Vol 2, Issue 489)
See has's replies in this thread for the correct analysis. You've
misunderstood, as he pointed out to someone else.
Perhaps because you get the digest you seem to be coming late to the party
and either you haven't yet read later contributions which have already taken
the argument further, or else not noticed them.
--
Paul Berkowitz
> From: Jonathan Levi MD <email@hidden>
> Date: Tue, 26 Jul 2005 17:00:55 -0400
> To: <email@hidden>
> Cc: <email@hidden>
> Subject: Re: set myList to myList & ...(Applescript-users Digest, Vol 2, Issue
> 489)
>
>> Message: 2
>> Date: Mon, 25 Jul 2005 21:44:38 +0200
>> From: Emmanuel <email@hidden>
>> Subject: Re: set myList to myList & ... and unexpected results
>> To: email@hidden
>> Message-ID: <p06002003bf0af145f9cb@[10.0.1.5]>
>> Content-Type: text/plain; charset="us-ascii" ; format="flowed"
>>
>> At 4:37 PM +0100 7/25/05, has wrote:
>>>
>>> Michael Sullivan wrote:
>>>
>>>>>> It's a bug, file a report. The first concatenation returns the
>>> right-hand
>>>>
>>>> This isn't a bug, it's a feature :)
>>>
>>> No, you've misread the problem. This has nothing to do with set vs
>>> copy. It's about the concatenation operator not returning a new
>>> object in certain situations. Example:
>>>
>>> set l to {1}
>>> set a to l & {}
>>> set b to {} & l
>>> set c to {0} & l
>>>
>>> set l's item 1 to 2
>>> log a --> {1}
>>> log b --> {2} -- Wrong! Should be {1}
>>> log c --> {0, 1}
>>
>> I vote "bug". Category: "big"
>
> No, it isn't. Per AppleScript Language Guide, p. 160:
>
>> If you use the Set command to set a variable to a list, record, or
>> script object, the variable shares data with the original list,
>> record, or script object. If you change the data of the original, the
>> value of the variable also changes. Here's an example of how this
>> works:
>>
>> set myList to { 1, 2, 3 }
>> set yourList to myList
>> set item 1 of myList to 4
>>
>> The result of these statements is that item 1 of both myList and
>> yourList is 4.
>>
>> Data sharing promotes efficiency when using large data structures.
>> Rather than making copies of shared data, the same data can belong
>> to multiple structures.
>
> In other words, "set" uses _reference(s)_ to the "rvalue(s)", by
> design rather than chance, in the interest of "efficiency."
>
> Because you've set b by reference, rather than by value, what you see
> from the log command is the value of the reference at the time of the
> log command, rather than at the time of the set command. The way to
> avoid this use of references is to use the copy command, which makes
> an actual, new copy of the object:
>
> set l to {1}
> copy {} & l to b
> set l's item 1 to 2
> log b --> 1
>
> BTW, logging strips braces; be aware of this if your object has
> complex structure and you want to see that structure as well as the
> data:
>
> set l to {1}
> {l, l}--result: {{1}, {1}}
>
> But
>
> set l to {1}
> log {l, l}--Event log: (*1, 1*)
>
> Jonathan
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Applescript-users mailing list (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Applescript-users mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden