我在ac API中遇到了一个is_equals()函数,它返回1表示非相等的sql表(false),0表示相等的sql表(true).我只是在我的代码上运行测试用例后才意识到这一点,一个用于正面示例,另一个用于负面,它们都失败了,起初没什么意义.API中的代码没有错误,因为输出在其文档中正确记录.
我的问题 - 是否存在颠倒的世界/平行宇宙/编码语言,这种逻辑符号是否正常?通常不是1吗?API的编码器是否出错?
caf*_*caf 36
比较函数通常返回0"等于",因此它们也可以返回"小于"的负数和"大于"的正数. strcmp()并且memcmp()像这样工作.
然而,惯性是零为假而非零为真,因为这是C流控制和逻辑布尔运算符的工作方式.所以可能是为这个函数选择的返回值很好,但是函数的名称是错误的(它应该只是被调用compare()或类似).
sar*_*old 14
这种颠倒世界在过程错误返回时很常见.shell变量$?报告从shell执行的前一个程序的返回值,因此很容易判断程序是成功还是失败:
$ false ; echo $?
1
$ true ; echo $?
0
Run Code Online (Sandbox Code Playgroud)
之所以选择这个是因为有一个程序成功的情况,但程序失败可能有很多原因 - 通过允许有许多不同的故障错误代码,程序可以确定为什么另一个程序失败而不必解析输出.
一个具体的例子是aa-status随AppArmor 强制访问控制工具提供的程序:
Upon exiting, aa-status will set its return value to the
following values:
0 if apparmor is enabled and policy is loaded.
1 if apparmor is not enabled/loaded.
2 if apparmor is enabled but no policy is loaded.
3 if the apparmor control files aren't available under
/sys/kernel/security/.
4 if the user running the script doesn't have enough
privileges to read the apparmor control files.
Run Code Online (Sandbox Code Playgroud)
(我确信有更广泛传播的程序有这种行为,但我很清楚这一点.:)
这很可能是原作者的错误,但是 1 为真而 0 为假的概念并不是一个普遍的概念。在 shell 脚本中,成功返回 0,失败返回任何其他数字。在 Ruby 等其他语言中,只有 nil 和 false 被认为是 false,任何其他值都被认为是 true,因此在 Ruby 中 1 和 0 都被认为是 true。
没有充分的理由1要成为真实和0虚假; 这就是事情总是被注意到的方式.因此从逻辑角度来看,API中的函数本身并不"错误".
这就是说,它通常不建议工作,对你使用任何语言或框架没有一个该死的好理由这样做的成语,所以无论谁写了这个功能可能是相当骨为首的,假设它不是简单的错误.
| 归档时间: |
|
| 查看次数: |
139595 次 |
| 最近记录: |