Вы можете добавить сервис Action в свой компонент и затем подписаться на него, чтобы прослушивать при отправке действия « CreatePositionSuccess ».
Например, в вашем компоненте:
import { Actions } from '@ngrx/effects';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
export class SampleClass implements OnInit, OnDestroy {
private unsubscribe$ = new Subject<void>();
//Injecting the service
constructor(private actions$: Action){}
onInit() {
this.actions$
.pipe(
ofType<CreatePositionSuccess>(CREATE_POSITION_SUCCESS),
// You can add more operator if it is necessary into the observable.
takeUntil(this.unsubscribe$)
)
.subscribe(() => {
// Here you can execute the reset function
});
}
onDestroy() {
this.unsubscribe$.next();
this.unsubscribe$.complete();
}
}
При этом вы сможете сбросить форму сразу же после вызова успешного действия.
Кстати, субъект «отписаться» используется для автоматической отмены подписки на Observable при уничтожении компонента, чтобы избежать утечек памяти. Вы можете заметить, как я использовал его в методе уничтожения.
Вычтите их и проверьте знак с помощью противных взломов битового жонглирования
http://graphics.stanford.edu/~seander/bithacks.html
Не делайте этого в производственном коде, если другие программисты знают, где Вы живете.
Вот забавная версия битового жонглирования, которая не имеет никаких условных переходов.
int g = (int)"greater";
int l = (int)"less";
int e = (int)"equal";
int a = 7;
int b = 10;
char *result = (char*)((((a - b) >> 31) & l) | (((b - a) >> 31) & g) | ((~((a - b) | (b - a))) >> 31) & e);
cout << result;
char c;
c=0x3D + (!(b/a) && (a-b)) - (!(a/b) && (a-b));
printf("a %c b",c);
Не один из образцов, представленных в вопросе или любом из ответов к настоящему времени, защищает от деления на нуль. С какой стати Вы стараетесь избегать 'если' оператор? Я подозреваю вопрос о домашней работе о?: операторы.
cout << "Maximum is: " << ((a>b)?a:b)
Вот так.
Не возможно сравнить два числа без сравнения. Можно уклониться от него и сделать косвенную операцию, но в конце дня Вы сравниваете что-то. Доверяйте компилятору, чтобы оптимизировать код и выбрать лучшие операции.
Вы могли бы использовать то, что знак вычисления a - b
зависит, на котором число больше. Это используется во многих реализациях сравнения. Но я полагаю, что Вы никогда не будете мочь полностью избежать сравнения. В этом случае все еще, по крайней мере, необходимо оценить содержание флага знака на процессоре.
Если просто необходимо отобразить более низкое количество, можно также использовать арифметические приемы:
result = ((a + b) - sqrt((a - b) * (a - b))) / 2
ОТРЕДАКТИРУЙТЕ erm …, Вам разрешают использовать switch
?
Я должен использовать операторы переключения и арифметические операторы.
switch
в основном то же, как объединено в цепочку if
и как таковой это также использует сравнение. Это звучит, как будто необходимо действительно просто выдержать сравнение с нулем для наблюдения что знак a - b
имеет.
Я просто наклон вижу любые серьезные основания, чтобы сделать это: кто хотел бы программировать без "если"?
возможный ответ:
((+ b) + брюшной пресс (-b)) / 2
Я предполагаю, что "брюшной пресс" просто скрывается, "если" где-нибудь, так же, как тернарный оператор, который является просто другим названием "если"...
(!(a/b) ? cout << " b is greater than a" : (!(b-a) ? cout << "a and b are equal" : cout << "a is greater than b") : cout << "a is greater than b");
Это становится немного грязным хотя
Править: Эта домашняя работа?
Извращенная Идея: используйте массив указателей функции. Затем с некоторыми арифметическими и битовыми операциями получают индекс в тот массив.
Как бессмысленное осуществление, вот способ реализовать a cond
функция - для служения цели if
, предположение его (и switch
, и ?:
) так или иначе исчез из языка, и Вы используете C++ 0x.
void cond(bool expr, std::function<void ()> ifTrue, std::function<void ()> ifFalse)
{
std::function<void ()> choices[2] = { ifTrue, ifFalse };
choices[expr == false]();
}
например.
cond(x > y,
/*then*/ [] { std::cout << "x is greater than y"; },
/*else*/ [] { std::cout << "x is not greater than y"; });
Как я говорю, бессмысленный.
void greater(int a, int b) {
int c = a - b;
switch(c) {
case 0:
cout << "a and b are equal" << endl;
break;
default:
int d = c & (1<<31);
switch(d) {
case 0:
cout << "a is bigger than b" << endl;
break;
default:
cout << "a is less than b" << endl;
}
}
}