I would very much like a standardized way of doing this. I am currently writing 
a game implementation in a functional style and the syntax for updating fields 
in pretty clunky. I’d like to avoid having to explicitly use var’s at all to 
accomplish it.


> On Mar 23, 2016, at 7:29 AM, James Campbell via swift-evolution 
> <[email protected]> wrote:
> 
> Yeah a way to have a function that mutates a struct return a new copy with 
> that mutation would be awesome ! Rather than mutating in place.
> 
> ___________________________________
> 
> James⎥Head Of CEO
> 
> [email protected] <mailto:[email protected]>⎥supmenow.com 
> <http://supmenow.com/>
> Sup
> 
> Runway East
> 
> 
> 10 Finsbury Square
> 
> London
> 
> 
> EC2A 1AF 
> 
> 
> On Wed, Mar 23, 2016 at 2:28 PM, William Dillon via swift-evolution 
> <[email protected] <mailto:[email protected]>> wrote:
> I like this.  I’m always annoyed when I need var just because I can’t get all 
> my initialization done with let.
> 
> - Will
> 
> > On Mar 23, 2016, at 2:32 AM, Brent Royal-Gordon via swift-evolution 
> > <[email protected] <mailto:[email protected]>> wrote:
> >
> >> let john = {firstName="John"; lastName="Doe"}
> >> let alice = {john with FirstName="Alice"}
> >>
> >>  Current way to do this in Swift is:
> >>
> >> let john = (firstName:"John", lastName:"Doe")
> >> var alice = john
> >> alice.firstName = "Alice"
> >
> > I think this is better modeled in Swift as something like:
> >
> >       let john = (firstName:"John", lastName:"Doe")
> >       let alice = with(john) {
> >               $0.firstName = "Alice"
> >       }
> >
> > `with` would be something like:
> >
> >       func with<Value>(value: Value, function: Value throws -> Void) 
> > rethrows -> Value {
> >               var mutableValue = value
> >               return try function(&mutableValue)
> >       }
> >
> > This would serve many different purposes:
> >
> > * If the value is a value type, allows you to return a modified copy
> > * Allows you to customize a value's properties immediately after 
> > initializing it, which many people have asked for
> > * Acts as a `tap` function when the block doesn't change the value (see 
> > <http://ruby-doc.org/core-2.3.0/Object.html#method-i-tap 
> > <http://ruby-doc.org/core-2.3.0/Object.html#method-i-tap>>)
> >
> > --
> > Brent Royal-Gordon
> > Architechies
> >
> > _______________________________________________
> > swift-evolution mailing list
> > [email protected] <mailto:[email protected]>
> > https://lists.swift.org/mailman/listinfo/swift-evolution 
> > <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected] <mailto:[email protected]>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to