Go 戈朗早期或晚期的争论评估?
在我的程序中,我以这种方式执行一系列顺序检查:Go 戈朗早期或晚期的争论评估?,go,Go,在我的程序中,我以这种方式执行一系列顺序检查: var value int if !(ParseOrFail(inputStrVal, &value) && Validate(value)) { return SomeErr } 我知道只有当ParseOrFail返回true时才会调用Validate,但我不确定在所有这样的场景中它是否会得到更新的值 这样做对吗?或者我必须传递一个指针进行验证 游乐场连接: 表达式指定通过应用 将运算符和函数转换为操
var value int
if !(ParseOrFail(inputStrVal, &value) &&
Validate(value)) {
return SomeErr
}
我知道只有当ParseOrFail返回true时才会调用Validate,但我不确定在所有这样的场景中它是否会得到更新的值
这样做对吗?或者我必须传递一个指针进行验证
游乐场连接:
表达式指定通过应用
将运算符和函数转换为操作数
操作数表示表达式中的基本值。操作数可以是
是一个文本,可能是一个限定的非空标识符,表示
常量、变量或函数,生成
函数或带括号的表达式
在包级别,初始化依赖项决定评估
变量中各个初始化表达式的顺序
声明。否则,在计算
表达式、赋值或返回语句,所有函数调用,
方法调用和通信操作在词汇表中进行评估
从左到右的顺序
给定函数类型为f的表达式f
f(a1, a2, … an)
用参数a1,a2,…an调用f。除了一个特殊情况外,
参数必须是可分配给
F和的参数类型在调用函数之前求值。
表达式的类型是F.A方法的结果类型
调用类似,但方法本身被指定为选择器
方法的接收器类型的值
逻辑运算符应用于布尔值并生成
与操作数的类型相同。计算右操作数
有条件地
&& conditional AND p && q is "if p then q else false"
|| conditional OR p || q is "if p then true else q"
! NOT !p is "not p"
代码的行为在Go编程语言规范中定义
var value int
if !(ParseOrFail(inputStrVal, &value) && Validate(value)) {
return SomeErr
}
或者,在伪代码中
ParseOrFail arguments are evaluated
ParseOrFail is called
if ParseOrFail == true
Validate arguments are evaluated
Validate is called
即,在您的示例中,延迟评估
表达式指定通过应用
将运算符和函数转换为操作数
操作数表示表达式中的基本值。操作数可以是
是一个文本,可能是一个限定的非空标识符,表示
常量、变量或函数,生成
函数或带括号的表达式
在包级别,初始化依赖项决定评估
变量中各个初始化表达式的顺序
声明。否则,在计算
表达式、赋值或返回语句,所有函数调用,
方法调用和通信操作在词汇表中进行评估
从左到右的顺序
给定函数类型为f的表达式f
f(a1, a2, … an)
用参数a1,a2,…an调用f。除了一个特殊情况外,
参数必须是可分配给
F和的参数类型在调用函数之前求值。
表达式的类型是F.A方法的结果类型
调用类似,但方法本身被指定为选择器
方法的接收器类型的值
逻辑运算符应用于布尔值并生成
与操作数的类型相同。计算右操作数
有条件地
&& conditional AND p && q is "if p then q else false"
|| conditional OR p || q is "if p then true else q"
! NOT !p is "not p"
代码的行为在Go编程语言规范中定义
var value int
if !(ParseOrFail(inputStrVal, &value) && Validate(value)) {
return SomeErr
}
或者,在伪代码中
ParseOrFail arguments are evaluated
ParseOrFail is called
if ParseOrFail == true
Validate arguments are evaluated
Validate is called
也就是说,在您的示例中,延迟求值。Validate每次都被调用,它的返回值只有在ParseOrFail返回true时才会被求值。除非ParseOfFail在单独的go例程中改变值,否则将使用更新的值调用Validate。@mkopriva如果第一个函数返回false,则不调用第二个函数。是的,我收回这句话:f,sorryValidate每次都被调用,它的返回值只有在parserfail返回true时才会被计算。除非ParseOfFail在单独的go例程中改变值,否则将使用更新的值调用Validate。@mkopriva如果第一个函数返回false,则不调用第二个函数。刚刚在操场登记。是的,我收回:f,对不起