[ruby-core:117832] [Ruby master Feature#20300] Hash: set value and get pre-existing value in one call
From:
"AMomchilov (Alexander Momchilov) via ruby-core" <ruby-core@...>
Date:
2024-05-11 16:21:55 UTC
List:
ruby-core #117832
SXNzdWUgIzIwMzAwIGhhcyBiZWVuIHVwZGF0ZWQgYnkgQU1vbWNoaWxvdiAoQWxleGFuZGVyIE1v bWNoaWxvdikuDQoNCg0KbWFtZSAoWXVzdWtlIEVuZG9oKSB3cm90ZSBpbiAjbm90ZS0yNDoNCg0K PiBJdCB3YXMgb3JpZ2luYWxseSBpbnRlbmRlZCBhcyBhIG1ldGhvZCB0byBpbXByb3ZlIHRoZSBl ZmZpY2llbmN5IG9mIGBTZXQjYWRkP2AsIGJ1dCB0aGUgdXNlIGNhc2Ugd2FzIHNoaWZ0ZWQgdG8g YSBtZXRob2QgZm9yIHRocmVhZCBzYWZldHkuIFRoaXMgaGlzdG9yeSBtYWtlcyB0aGUgdXNlIGNh c2UgbGVzcyBwZXJzdWFzaXZlLg0KDQpUaGUgaW1tZWRpYXRlIG5lZWQgYW5kIHVzZSBjYXNlIGlz IGZvciB0aGF0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHRvIFNldC4NCg0KVGhlIGRpc2N1c3Np b24gb2YgdGhyZWFkIHNhZmV0eSBpcyBqdXN0IGFuIGluY2lkZW50YWwgYmVuZWZpdCBvZiB0aGlz IGFwcHJvYWNoLCBhcyBjb21wYXJlZCB0byB0aGUgY291bnQtYmFzZWQgYWx0ZXJuYXRpdmUgdGhh dCB3YXMgcHJvcG9zZWQuDQoNCj4gSWYgaXQgaXMganVzdCBhbiBpbnRlcm5hbCBtZXRob2QgZm9y IGVmZmljaWVuY3ksIGEgbG9uZyBhbmQgdmVyYm9zZSBuYW1lIG1heSBiZSBwcmVmZXJyZWQuDQoN Ckkgd291bGQgYmUgb2theSB3aXRoIHRoaXMsIGlmIHRoZXJl4oCZcyBubyBhcHBldGl0ZSBmb3Ig YSBwdWJsaWMsIHNob3J0LW5hbWVkIEFQSSBmb3IgdGhpcy4gUGVyaGFwcyBzb21lIHVuZGVyc2Nv cmVkIG5hbWUgdGhhdCBjb21tdW5pY2F0ZXMgdGhhdCB0aGlzIGlzIOKAnGxpYnJhcnkgaW50ZXJu YWzigJ0gdG8gdGhlIHN0ZGxpYi4NCg0KPiBZb3UgbWF5IHdhbnQgdG8gZXhwbGFpbiB0aGUgY29u Y3JldGUgZXhhbXBsZSBvZiB0aGUgdXNlIGNhc2Ugb2YgdGhyZWFkIHNhZmV0eSBmb3IgSGFzaCB2 YWx1ZSBleGNoYW5nZSwgdGhpcyBwcm9wb3NlZCBBUEkgaXMgcmVhbGx5IHN1ZmZpY2llbnQgZm9y IHRoYXQgZXhhbXBsZSB1c2UgY2FzZSwNCg0KSSBkb27igJl0IHRoaW5rIEkgY2FuIG1ha2UgYSBi ZXR0ZXIgY2FzZSB0aGFuIHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBJ4oCZdmUgYWxyZWFk eSBwcm9wb3NlZCwgYW5kIGl0cyBpbW1lZGlhdGUgYXBwbGljYXRpb24gdG8gdGhlIFNldCBwZXJm b3JtYW5jZSBwcm9ibGVtIEnigJl2ZSBpZGVudGlmaWVkIGFuZCBmaXhlZCwgdXNpbmcgdGhpcyBB UEkuDQoNCklmIG90aGVycyB3YW50IHRvIGNoaW1lIGluIHdpdGggdGhlIHVzZSBjYXNlcyBpbiB0 aGV5IGhhdmUgaW4gbWluZCwgSeKAmWQgbG92ZSB0byBoZWFyIHRob3NlLg0KDQo+IGFuZCB3aGF0 IEFQSSBhbmQgbmFtZSBhcmUgZ2l2ZW4gdG8gc2ltaWxhciBmZWF0dXJlIGluIG90aGVyIGxhbmd1 YWdlcy4NCg0KTGV04oCZcyBmaXJzdCBkZWNpZGUgaWYgd2Ugd2FudCB0aGlzIEFQSSwgaW4gKmFu eSogZm9ybS4gT25jZSB3ZSBhZ3JlZSBvbiB0aGF0LCBJ4oCZZCBiZSBoYXBweSB0byBkaXZlIGlu dG8gZGV0YWlscyBsaWtlIG5hbWluZywgYW5kIGNvbXBhcmlzb25zIHRvIG90aGVyIGxhbmd1YWdl cy4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRmVhdHVyZSAj MjAzMDA6IEhhc2g6IHNldCB2YWx1ZSBhbmQgZ2V0IHByZS1leGlzdGluZyB2YWx1ZSBpbiBvbmUg Y2FsbA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzIwMzAwI2NoYW5nZS0xMDgy MzkNCg0KKiBBdXRob3I6IEFNb21jaGlsb3YgKEFsZXhhbmRlciBNb21jaGlsb3YpDQoqIFN0YXR1 czogT3Blbg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KV2hlbiB1 c2luZyBhIEhhc2gsIHNvbWV0aW1lcyB5b3Ugd2FudCB0byBzZXQgYSBuZXcgdmFsdWUsICoqYW5k Kiogc2VlIHdoYXQgd2FzIGFscmVhZHkgdGhlcmUuIFRvZGF5LCB5b3UgKipoYXZlKiogdG8gZG8g dGhpcyBpbiB0d28gc3RlcHM6DQoNCmBgYHJ1YnkNCmggPSB7IGs6ICJvbGQgdmFsdWUiIH0NCg0K IyAxLiBEbyBhIGxvb2stdXAgZm9yIGA6a2AuDQpvbGRfdmFsdWUgPSBoWzprXQ0KIyAyLiBEbyBh bm90aGVyIGxvb2stdXAgZm9yIGA6a2AsIGV2ZW4gdGhvdWdoIHdlIGp1c3QgZGlkIHRoYXQhDQpo WzprXSA9ICJuZXcgdmFsdWUiDQoNCnVzZShvbGRfdmFsdWUpDQpgYGANCg0KVGhpcyByZXF1aXJl cyB0d28gc2VwYXJhdGUgYEhhc2hgIGxvb2stdXBzIGZvciBgOmtgLiBUaGlzIGlzIGZpbmUgZm9y IHN5bWJvbHMsIGJ1dCBpcyBleHBlbnNpdmUgaWYgY29tcHV0aW5nIGAjaGFzaGAgb3IgYCNlcWw/ YCBpcyBleHBlbnNpdmUgZm9yIHRoZSBrZXkuIEl0J3MgaW1wb3NzaWJsZSB0byB3b3JrIGFyb3Vu ZCB0aGlzIHRvZGF5IGZyb20gcHVyZSBSdWJ5IGNvZGUuDQoNCk9uZSBleGFtcGxlIHVzZSBjYXNl IGlzIGBTZXQjYWRkP2AuIFNlZSBodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjAz MDEgZm9yIG1vcmUgZGV0YWlscy4NCg0KSSBwcm9wb3NlIGFkZGluZyBgSGFzaCNleGNoYW5nZV92 YWx1ZWAsIHdoaWNoIGhhcyBzZW1hbnRpY3MgYXJlIHNpbWlsYXIgdG8gdGhpcyBSdWJ5IHNuaXBw ZXQ6DQoNCmBgYHJ1YnkNCmNsYXNzIEhhc2gNCiAgIyBFeGFjdCBtZXRob2QgbmFtZSBUQkQuDQog IGRlZiBleGNoYW5nZV92YWx1ZShrZXksIG5ld192YWx1ZSkNCiAgICBvbGRfdmFsdWUgPSBzZWxm W2tleV0NCiAgICBzZWxmW2tleV0gPSBuZXdfdmFsdWUNCiAgICBvbGRfdmFsdWUNCiAgZW5kDQpl bmQNCmBgYA0KDQouLi4gZXhjZXB0IGl0J2xsIGJlIGltcGxlbWVudGVkIGluIEMsIHdpdGggbW9k aWZpY2F0aW9ucyB0byBgdGJsX3VwZGF0ZWAgdGhhdCBhY2hpZXZlcyB0aGlzIHdpdGggYSBoYXNo LWxvb2t1cC4gDQoNCkknbSBvcGVuaW5nIHRvIGFsdGVybmF0aXZlIG5hbWUgc3VnZ2VzdGlvbnMu IEBub2J1IGNhbWUgdXAgd2l0aCBgZXhjaGFuZ2VfdmFsdWVgLCB3aGljaCBJIHRoaW5rIGlzIGdy ZWF0Lg0KDQpIZXJlJ3MgYSBQUiB3aXRoIGEgUG9DIGltcGxlbWVudGF0aW9uOiBodHRwczovL2dp dGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvMTAwOTINCg0KYGBgcnVieQ0KaCA9IHsgazogIm9sZCB2 YWx1ZSIgfQ0KDQojIERvZXMgb25seSBhIHNpbmdsZSBoYXNoIGxvb2stdXANCm9sZF92YWx1ZSA9 IGguZXhjaGFuZ2VfdmFsdWUoOmssICJuZXcgdmFsdWUiKQ0KDQp1c2Uob2xkX3ZhbHVlKQ0KYGBg DQoNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxpc3Qg LS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1h aWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZvIC0t IGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9wb3N0b3JpdXMvbGlzdHMvcnVieS1j b3JlLm1sLnJ1YnktbGFuZy5vcmcv