我可以强制执行不理想的逻辑条件检查吗?

时间:2015-06-03 14:36:37

标签: dart

是否可以更改whay逻辑或||语句在dart中执行。 例如。我的函数foo()boo()的返回类型为bool。如果我写

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

foo()返回true boo()将不会被执行。我希望能够改变这种状况,但无法找到办法。

我很惊讶地发现这无济于事:

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

3 个答案:

答案 0 :(得分:3)

非短路布尔运算符是您正在寻找的短语,目前无法实现,请参阅https://github.com/dart-lang/sdk/issues/1080

答案 1 :(得分: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中试用。

答案 2 :(得分: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中试用。