[FeatureRequest] Update function for immutable objects
От: ifle  
Дата: 20.11.17 07:42
Оценка:
В F# есть крутая фича позволяющая довольно элегантно редактировать рекорды.

type Person = {
    FirstName: string
    LastName: string
    Email: string
}

let person = { FirstName = "first"; LastName = "last"; Email = "email" }
let updatedEmail = { person with Email = "newEmail" } // Copy and Update Expression


Хорошо бы иметь функцию которая копировала объект с измененными значениями
class Person
{
      public string FirstName { get; }
      public string LastName { get; }

     public Person(string firstName, string lastName)
    {
          FirstName = firstName;
          LastName = lastName;
    }
}

var person = new Person("bob", "jonhs");
var person2 = person.Update({ FirstName = "michael" });
var person3 = person.Update(p => p.FirstName, "michael");
Re: [FeatureRequest] Update function for immutable objects
От: Sinix  
Дата: 20.11.17 09:18
Оценка:
Здравствуйте, ifle, Вы писали:

I>Хорошо бы иметь функцию которая копировала объект с измененными значениями

Это уже к CodeJam.Mapper, кмк. Копирование без emit сделать нельзя, если нужно обновлять ридонли-словари или коллекции, то всё ещё веселее будет.

Ну и чисто от себя — не будет оно работать эффективно без поддержки со стороны языка. Точнее, не не будет, а не работает, проверено раз 5 на практике.
Иногда можно выкрутиться с freezable objects, но в общем случае эта задача довольно нетривиальная и с POCO не дружит.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.