首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Golang逻辑与函数结果

Golang逻辑与函数结果
EN

Stack Overflow用户
提问于 2022-08-01 12:36:06
回答 1查看 238关注 0票数 0

我想要运行一个函数多次,然后做一些事情,如果有任何失败。

因此,我在循环调用之前设置了一个标志,被调用的函数返回一个成功/失败的布尔值,但是,如果我使用内联逻辑,并且函数不再被调用,就好像一个if语句存在一样。有人能解释一下吗?

围棋游乐场(https://go.dev/play/p/I5DP2mDmoqI)的例子

代码语言:javascript
复制
package main

import "fmt"

func main() {
    fmt.Println("In-line logical AND")
    resultOK := true
    for i := 0; i < 10; i++ {
        resultOK = resultOK && doSomething(i)
    }

    fmt.Println("Separate line for logical AND")
    resultOK = true
    for i := 0; i < 10; i++ {
        result := doSomething(i)
        resultOK = resultOK && result
    }

}

func doSomething(i int) bool {
    fmt.Println("Hello, 世界", i)
    return i%2 == 0

}

结果输出

代码语言:javascript
复制
In-line logical AND
Hello, 世界0 :  true
Hello, 世界1 :  false
 :  false
 :  false
 :  false
 :  false
 :  false
 :  false
 :  false
 :  false
Separate line for logical AND
Hello, 世界0 :  true
Hello, 世界1 :  false
Hello, 世界2 :  false
Hello, 世界3 :  false
Hello, 世界4 :  false
Hello, 世界5 :  false
Hello, 世界6 :  false
Hello, 世界7 :  false
Hello, 世界8 :  false
Hello, 世界9 :  false
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-01 12:43:03

区别是短路评估

如果逻辑操作数的左操作数为false,则结果将是false,因此不计算右操作数。在第一个示例中,右操作数是函数调用,因此不会调用该函数。类似地,如果逻辑OR的第一个操作数是true,则结果是true,因此在这种情况下也不会计算正确的操作数。

规范:逻辑运算符:中提到了这一点

逻辑运算符应用于布尔值值,并产生与操作数相同类型的结果。右操作数有条件地求值.

在第二个示例中,函数在逻辑和逻辑之前调用,因此不管resultOK是什么,都调用它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73193772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档