[swift-users] inout params seem to have undefined behavior
owenzx at gmail.com
Sat Jun 11 21:18:40 CDT 2016
inout says it will copy into the function and copy back after the function
is finished. But the order is unknown. So I think the example,
print(acopy) // prints "[1, 2, 99]" (e.g. a let variable changed!)
s a bug as the value changed inside of the function, before the function
“In-out parameters are passed as follows:
When the function is called, the value of the argument is copied.
In the body of the function, the copy is modified.
When the function returns, the copy’s value is assigned to the original
摘录来自: Apple Inc. “The Swift Programming Language (Swift 2.2)”。 iBooks.
On Sun, Jun 12, 2016 at 9:27 AM, Karl Pickett via swift-users <
swift-users at swift.org> wrote:
> Wow there are some real doozy inout code examples in there, showing
> aliasing much more fun than my snippet. Unfortunately I can't
> understand anything else the doc is talking about. I guess I'll just
> say a prayer and throw salt over my shoulder if using inout.
> On Sat, Jun 11, 2016 at 6:05 PM, Brent Royal-Gordon
> <brent at architechies.com> wrote:
> >> My recollection is that in Swift the subscript operator (`arr` in
> this case) can refer to the setter xor the getter, but not both within the
> same statement.
> > Quite to the contrary. Rather than using the setter directly, Swift
> often uses `materializeForSet`, a combined get-and-set operation which is
> much more efficient, particularly when assigning directly into arrays. To
> keep from having to use very slow access all the time, it imposes a rule
> (which is not and cannot be enforced by the compiler) that you can't hold
> two mutable references to overlapping storage simultaneously, or they may
> do strange things like lose some of the writes you make.
> > Here's an old design document discussing some things in this area: <
> I'm not sure how authoritative it is, but it might give you an idea of
> what's going on.
> > --
> > Brent Royal-Gordon
> > Architechies
> swift-users mailing list
> swift-users at swift.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the swift-users