Как читать, если в PHP установлен флажок ?

Закрытия

, Так как анонимные делегаты были добавлены к 2,0, мы были в состоянии разработать закрытия. Они редко используются программистами, но предоставляют большие преимущества, такие как непосредственное повторное использование кода. Рассмотрите эту часть кода:

bool changed = false;

if (model.Prop1 != prop1)
{
    changed = true;
    model.Prop1 = prop1;
}
if (model.Prop2 != prop2)
{
    changed = true;
    model.Prop2 = prop2;
}
// ... etc. 

Примечание, что операторы "if" выше выполняют подобные части кода за исключением одной строки кода, т.е. установку различных свойств. Это может быть сокращено со следующим, где переменная строка кода вводится в качестве параметра в Action объект, соответственно названный setAndTagChanged:

bool changed = false;
Action<Action> setAndTagChanged = (action) => 
{ 
    changed = true; 
    action(); 
};

if (model.Prop1 != prop1) setAndTagChanged(() => model.Prop1 = prop1);
if (model.Prop2 != prop2) setAndTagChanged(() => model.Prop2 = prop2);

Во втором случае, закрытие позволяет Вам определять объем change переменная в Вашей лямбде, которая является кратким способом приблизиться к этой проблеме.

альтернативный путь состоит в том, чтобы использовать другую неиспользованную функцию, "или равный" двоичный оператор присваивания. Следующий код показывает как:

private bool conditionalSet(bool condition, Action action)
{
    if (condition) action();
    return condition;
}

// ...

bool changed = false;
changed |= conditionalSet(model.Prop1 == prop1, () => model.Prop1 = prop1);
changed |= conditionalSet(model.Prop2 == prop2, () => model.Prop2 = prop2);
247
задан Thew 8 February 2015 в 12:26
поделиться