2015-06-03 2 views
3

Можно ли изменить логический или логический оператор || в дротике. Например, . У меня есть функции foo() и boo(), у которых есть тип возврата bool. Если я пишуМогу ли я принудительно проверять неоптимальные логические условия?

(foo() || boo()) ? /* A */ : /* B */; 

и foo() возвращает истинное boo() не будет выполнена. Я хотел бы иметь возможность изменить это, но не смог найти способ сделать это.

Я был удивлен, увидев, что это не поможет:

bool helper = false; 
helper = helper || foo(); 
helper = helper || boo(); 
(helper) ? /* A */ : /* B */ 
+1

Если вы измените помощника на 'bool helper = foo(); helper = boo() || хелпер, тогда он должен работать. Это действительно так: 'var tmp = foo(); ... (boo() || tmp) ... '. – lrn

ответ

3

boo() Выполняется только тогда, когда foo() возвращает true, потому что в любом случае результат будет ложным (короткое замыкание). Вы должны заставить явно выполнить как:

var f = foo(); 
var b = boo(); 
(f || b) ? print('false') : print('true'); 

Если вы хотите использовать его встраивать вы можете использовать специальный метод, как упомянуто @AlexandreArdhuin или

[foo(), boo()].reduce((v1, v2) => v1 || v2) 
    ? print('false') : print('true'); 

Попробуйте в DartPad.

3

can not use | in dart Вы, но вы можете написать вспомогательную функцию, как or и имеют синтаксис довольно близко:

main() { 
    if (or([foo(), boo()])) { 
    print('ok'); 
    } 
} 

bool or(List<bool> values) => values.fold(false, (t, e) => t || e); 

bool foo() { 
    print("foo"); 
    return true; 
} 

bool boo() { 
    print("boo"); 
    return true; 
} 

Попробуйте в DartPad.