假设我们有一个简单的boolean
表达式,其中填充了布尔返回类型函数调用,并且它们之间有logical OR
个运算符。此boolean
表达式仅在单个if
子句中使用。例如:
if (c1() or c2() or c3()): #c1(), c2(), c3() are sample boolean return type methods
foo1()
foo2()
print ("foo1() and foo2() have been executed because condition # <number> is true")
c2()
之类的条件是条件#2),因此
程序在if子句中输入了代码而不存储了
返回任何方法调用或再次调用任何方法的值?c1()
,c2()
和c3()
都将返回true
布尔值。但是由于short-circuit boolean evaluation
,
c2()
和c3()
将永远不会执行。我们可以通过某种条件/方法调用以某种方式找到它吗,在应用第1点中提到的相同条件时,程序可能仍在if子句中进入了代码块。答案可以是任何编程语言。我只是想知道它是否可行以及如何实现。
答案 0 :(得分:0)
由于某些原因,您同时在python
和c#
上进行了标记,每种语言的答案可能完全不同。
在C#中,我将按照以下模式进行操作:
public ResultModel checkSomething()
{
ResultModel retVal = new ResultModel();
if(condition1)
{
retVal.DidSucceed = true;
retVal.Source = eSource.Condition1;
}
else if (condiction2){
...
}
return retVal;
}
class ResultModel
{
public bool DidSucceed {get;set;}
public eSource Source {get;set;}
}
答案 1 :(得分:0)
这是在Python中执行此操作的方式,
condn = 0
for i, c in enumerate((c1(), c2(), c3()):
if c:
condn = i + 1
break
if condn:
foo1()
foo2()
print("condition number #{} is true".format(condn))
# if c2() is true, it prints
"condition number #2 is true"
答案 2 :(得分:0)
您可以做一些棘手的事情,但不是最好的解决方案
check = []
def c1():
global check
if True: check.append('c1')
答案 3 :(得分:0)
第一个问题的答案是否定的,只要其中一个函数返回true
,if内的代码就会执行,并且如果没有调试器或将值存储在变量中就看不到值是什么。
答案 4 :(得分:0)
要获得这种行为而又不污染全局变量的名称空间或将c*
函数转换为类,我可以这样实现:
conditions = [c1, c2, c3]
for index, cond in enumerate(conditions):
if cond():
foo1()
foo2()
print(f"foo1() and foo2() have been executed because condition {index} is true")
break
这基本上是对or
行为进行硬编码,但除此之外没关系。