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]> 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>) > > -- > Brent Royal-Gordon > Architechies > > _______________________________________________ > 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
