2014-05-11 4 views
0

Можно проверить, отключено ли условие при выполнении этого условия и как это будет реализовано (используя язык по вашему выбору)?Отключить проверку состояния при выполнении условия?

Пример:

Say Условный оператор работает внутри функции обновления, я хотел бы, если-заявление не будет вызываться, когда заявление запустить правда один раз в жизненном цикле программы. Я думаю, что это может быть достигнуто путем переноса инструкции в функциональную переменную (javascript), а затем переназначение этой переменной для возврата void, если/когда условие истинно.

+3

Просто закончите область действия, как 'break' в' while' ??? – herohuyongtao

+0

Если вы имеете в виду строго * если * (но не * только если *), то это можно сделать, просто удалив код, проверяющий условие. Если вы имеете в виду * тогда и только тогда, когда *, то это невозможно, чтобы решить, следует ли проверять условие, вам сначала нужно проверить условие, и в этот момент было бы слишком поздно не проверять условие. – Mankarse

+0

Вы можете быть более понятным PLS? Попробуйте привести пример поведения, которое вы пытаетесь достичь. – bolov

ответ

0

Хорошо допустим у вас есть это (C++):

void update() { 
    // code 

    if (condition) { 
    // code 
    } 

    // code 
} 

Что вы можете сделать, это:

void update() { 
    // code 

    static bool already_ran = false; 
    if (!already_ran && condition) { 
    alreadu_ran = true; 
    // code 
    } 

    // code 
} 

static означает, что переменная сохраняет это значение через вызовы функций и в C/C++ логические операторы (&& в этом примере) закорочены. Это означает, что они не оценивают второй операнд, если они им не нужны. Например, если !already_ran равно false, тогда все выражение равно false независимо от condition, так что condition не оценивается.

+0

Состояние все еще оценивается. Я надеялся, что будет некоторая функциональность на родном языке или шаблон дизайна, чтобы избежать этого все вместе. Причина в том, что я думаю, что это было бы более эффективно, чем запуск произвольного количества условий (даже булевых, может быть в 1000-х годах) при каждом вызове update() (например, 30 раз в секунду). – Nate

+0

отметьте его тогда и узнайте, как медленно – bolov

+0

Ха Я уверен, что все еще очень быстро :-) – Nate

0

Не на 100% уверен, что это более эффективно, чем простое условие для запуска функции увеличенияValue(), но вот код, который я использую, и, похоже, работает (как минимум, как 3). Обновление вызывается примерно 30 раз в секунду.

public function update(){ 
    if(isHit){ //isHit is part of another condition used by collision 
     increaseValues = function() { 
      this.height += 1; 
      this.width += 1; 
      this.x -= 1; 
      this.y -= 1; 
      this.alpha += -0.1; 
      if (this.alpha == 0){ 
       increaseValues = function(){ 
        return; 
       } 
      } 
     } 
    } 
    increaseValues(); 
} 
Смежные вопросы