在防护测试中何时更喜欢使用“and”而不是“andalso”

2024-01-03

我很好奇为什么逗号是一个快捷方式and并不是andalso在警卫测试中。

由于我称自己为“C 本地人”,所以我看不到短路布尔求值的任何缺点。

我使用编译了一些测试代码to_core标记以查看实际生成的代码。使用逗号,我看到左边的值和右边的值都被评估并且都被与了。和andalso你在 case 块中有一个 case 块,并且没有调用erlang:and/2.

我没有做过基准测试,但我敢说andalso变体是更快的一种。


深入研究过去:

  • 最初在警卫中只有,分开tests从左到右对它们进行评估,直到没有更多的测试并且警卫成功,或者测试失败并且警卫作为一个整体失败。之后;添加是为了允许在同一条款中替代后卫。如果警卫评估双方,在测试之前,有人就已经搞错了。 @Kay 的例子似乎暗示他们确实按照应有的方式从左到右。

  • 布尔运算符直到很晚才被允许在守卫中使用。

  • and, 和...一起or, xor and not, 是一个布尔运算符,并非用于控制。他们都是strict并首先评估它们的参数,就像算术运算符一样+, -, *和 '/'。 C 中也存在严格的布尔运算符。

  • 短路情况control运营商andalso and orelse后来添加以简化一些代码。正如您所说,编译器确实将它们扩展为嵌套的case表达式,因此使用它们不会带来性能提升,只是代码方便和清晰。这可以解释您看到的结果代码。

  • N.B.警卫中有tests而不是表达式。有一个微妙的差异,这意味着在使用时and and andalso相当于, using orelse不等于;。这留给另一个问题。提示:一切都与失败有关。

So both and and andalso有他们的位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在防护测试中何时更喜欢使用“and”而不是“andalso” 的相关文章

  • Python 中 NOT、AND、OR 的逻辑运算符(运算顺序)的优先级(优先级)

    据我所知 在C C 中 NOT AND OR的优先级顺序是NOT gt AND gt OR 但这在 Python 中似乎并没有以类似的方式工作 我尝试在Python文档中搜索它但失败了 我猜我有点不耐烦 有人可以帮我解决这个问题吗 It s
  • 如何使用 Erlang 发送推送通知?

    我正在尝试使用 Erlang 向 APNs 发送推送通知 这是我到目前为止想出的代码 module apnstest2 export connect 0 connect gt application start ssl ssl seed s
  • Erlang中如何维护状态?

    我见过人们使用口述 命令 记录用于维护我读过的许多博客中的状态 我发现这是一个非常重要的概念 一般来说 我理解维护状态和递归的含义 但是当涉及到 Erlang 时 我对它的处理方式有点模糊 有什么帮助吗 维护状态的最简单方法是使用gen s
  • 随机排列列表中的元素(随机重新排列列表元素)

    我的程序的一部分要求我能够随机洗牌列表元素 我需要一个函数 当我给它一个列表时 它会伪随机地重新排列列表中的元素 安排的改变Must每次通话时都可以看到相同的列表 我的实现似乎工作得很好 但我觉得它相当长 并且正在增加我的代码库 而且 我有
  • 构建 Erlang 服务器场(用于业余爱好项目)最便宜的方法是什么? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 假设我们有一个 本质上并行 的问题需要用 Erlang 软件来解决 我们有很多并行进程 每个进程都执行顺序代码 不是数字运算 并且我们向它们投入的 C
  • VB.NET中有条件三元运算符吗?

    在 Perl 和其他语言 中 条件三元运算符可以表示如下 my foo bar buz cat dog VB NET中有类似的运算符吗 取决于版本 这IfVB NET 2008 中的运算符是三元运算符 以及空合并运算符 这是刚刚推出的 20
  • Erlang 17推荐使用地图替换记录,但是如何让mnesia支持地图?

    在 joe 的 Erlang 的重大改变 中http joearms github io 2014 02 01 big changes to erlang html http joearms github io 2014 02 01 big
  • 与共享数据相比,消息传递的性能损失

    最近有很多关于不使用锁和使用 Erlang 等消息传递方法的讨论 或者关于使用不可变的数据结构 例如函数式编程与 C Java 中的比较 但我关心的是以下几点 AFAIK Erlang 不保证消息传递 消息可能会丢失 如果还要担心消息丢失
  • 您应该将应用程序属性放在 rebar erlang 应用程序中的什么位置?

    新手问题 我编写了第一个基于 rebar 的 erlang 应用程序 我想配置一些基本属性 例如服务器主机等 放置它们的最佳位置在哪里以及如何将它们加载到应用程序中 接下来的步骤是发布版本并在其中创建节点 节点在独立的 Erlang VM
  • 零部署 CouchDB 嵌入 Windows 应用程序?

    我可能在这里做梦 但我想知道是否有可能将最小的 CouchDB 引擎完全嵌入到 Windows 应用程序中 以便该应用程序可以运行而无需在用户计算机上安装 CouchDB Erlang 我已经提供了这种精简 捆绑的功能 请在此处查看http
  • 在erlang中打印数字的每个数字的问题

    我正在尝试编写一个程序 该程序将读入一个数字 然后将该数字的每个数字输出到列表中 然而 在我尝试使用数字 8 和 9 之前 大多数事情看起来都很好 该程序仅输出 b t反而 如果输入的数字包含8或9 同时还有其他数字 例如283 就可以正常
  • Erlang 如何并发处理访问邮箱

    关于如何使用erlang邮箱的信息有很多 但很少找到一篇论文或文档描述erlang如何在VM内部同时实际访问邮箱 据我了解 Erlang VM 必须执行锁定或 CAS 操作以确保消息完整性 erlang幕后有没有什么精巧的方法 我假设您所说
  • 如何使用 ibrowse 将附件上传到 CouchDB 中的文档?

    我已经使用curl上传图像文件Penguins jpg 例如 C curl gt curl vX PUT H Content Type image jpeg http localhost 5984 DBNAME DOCID Penguins
  • Erlang:如何将小数转换为填充零的十六进制字符串

    我想在 Erlang 中将 42 基数 10 转换为 000002A 基数 16 我在网上找到了一些提示 io format 8 0B n 42 gt 00000042 And io format 16B n 42 gt 2A 但我似乎无法
  • 拦截登录/注销ejabberd

    我想知道用户何时在自定义模块中的 ejabberd 会话中登录和注销 而不更改 ejabberd 代码 我需要它 因为我必须在用户登录时执行一些操作 并清理用户注销时执行的操作 另外 在某些情况下我需要能够注销用户 那么 有没有办法扩展某些
  • Erlang Mnesia 中的分页搜索

    例如 给定记录 record item id time status 我想搜索 1000 到 1100 个项目 按时间和顺序排序status lt lt finished gt gt 有什么建议么 这取决于您的查询是什么样的 如果您需要按许
  • 重载逻辑运算符 && 和 ||从 C++17 开始短路?

    我读到http en cppreference com w cpp language operators http en cppreference com w cpp language operators 布尔逻辑运算符 运算符 和运算符
  • Erlang:如何将原子转换为字符串?

    我想从原子转换为字符串 Input hello world Output hello world 我该如何实现这一目标 Use atom to list http erlang org doc man erlang html atom to
  • 如何在 Erlang 中将数字转换为单词?

    我发现了一个关于将数字转换为 单词 的有趣问题 代码高尔夫 数字到单词 https stackoverflow com questions 309884 code golf number to words 我真的很想看看你如何在 Erlan
  • Erlang 中的接受器池和负载平衡?

    From http www erlang org doc man gen tcp html accept 1 http www erlang org doc man gen tcp html accept 1 值得注意的是 accept 调

随机推荐