erlang/OTP 平台(学习笔记)(四)

Erlang语言精要

Erlang shell

相较于日常惯用的系统,Erlang系统是一套更富交互性的环境。使用大部分编程语言时,要么把程序编译成OS可执行文件后运行,要么用解释器来执行一堆脚本文件或编译后的字节码文件。无论哪种情况,都是让程序一路跑到结束或崩溃为止,然后回到操作系统环境中,再重复这个过程。

Erlang却不是这样,它更像是在操作系统中运行着的另一个操作系统。虽然Erlang的启动速度很快,但它并非被设计用于需要频繁启停的场合—它被设计用于持续运行,是为交互式开发、调试和升级而设计的。理想情况下,只有碰到硬件故障、操作系统升级之类的情况才有必要重启Erlang。

与Erlang系统的交互主要是在shell中进行的。shell就是你的指挥中心。

启动shell

我们假设你已经下载并安装了Erlang/OTP。如果你用的是Linux、Mac OSX,或其他类UNIX系统,启动一个终端并运行erl命令即可。如果你在用Windows,你应该点击安装程序替你生成的Erlang图标,随后会启动名为werl的程序,它会打开一个特殊的Erlang终端,这样做可以避免直接在Windows终端下交互式运行erl会碰到的一些问题。

输入表达式

首先,你在shell提示符下输入的并不是什么命令,而是表达式,两者的区别在于表达式一定会返回一个求值结果。表达式求值完毕后,shell就会打印出求值结果。shell会记住这些结果,后续可以用v(1)、v(2)这样的语法来引用它们。比如,输人数值42,紧跟一个英文句号(.),再回车,你将看到:

1>42.
42
2>

敲下回车后,Erlang会对表达式42求值,并打印求值结果(数值42),最后给出一个新的提示符,编号为2。不过为什么要在42后面加上一个句号呢?

1.以句号结束

在敲下回车之前,必须用句点告诉shell表达式已输入完毕。如果不输人句号就回车,shell会一直提示你输入更多字符(提示符编号不会增加),就像这样:

2>12
2> + 5
2>.
17
3>

要是一开始忘了句号,不用担心,补上之后敲回车就行了。可以看到,这个简单的算术表达式的求值结果仍与预期相符。现在,我们来试着取回先前的求值结果:

3>v(1).
42
4>v(2).
17
5>v(2) + v(3).
59
6>
2.输入带引号的字符串

当你输人双引号或单引号字符串时(现在先不讨论二者的区别),有一个特别值得注意的问题,如果忘了结尾的引号就敲了回车,shell会把同样的提示符再打印一遍并继续等待更多输人,这跟上一个忘记句号的例子差不多。如果碰到这个情况,可以输入匹配的引号并跟上一个句号,再敲回车。例如,像这样:

1>"hello there.
1>

这里的句号并不是这个字符串结束的标志一它是字符串的一部分。为了让shell从这个状态中恢复过来,你需要加些内容来结束这个字符串:

1>".
"hello there. \n"
2>

注意最终的字符串中包含一个句号和一个换行符,而这多半不是你想要的结果。你可以用上方向键或Ctrl-P找回那行并重新编辑,在正确的位置插人遗漏的引号:
 

2>"hello there".
"hello there"
3>v(2).
"hello there"
4>

shell函数

在Erlang中有一类像v(N)这样的函数,它们只存在于shell中。这些shell函数的名字通常很短(也比较晦涩)。要获取完整的shell函数清单,可以输人help()(具本身也是一个Shell函数)。

退出shell

退出shell(并停止整个Erlang系统)的方法有好几种:

1.调用q()或init: stop ()

最安全的方法就是运行上一节提到过的shell函数q()。这是init:stop()函数的一个简写形式(你也可以直接调用这个函数),该函数以一种可控的方式关闭整个Erlang系统,它会通知正在运行的应用停止运行并给它们预留出响应时间。通常这个过程几秒内就可以完成,但线上系统可能需要花费更多的时间来完成各种清理工作。

2.BREAK菜单

如果急着退出而运行的东西也不重要,在类UNIX系统中你可以按Ctrl-C唤出底层的BREAK菜单,Windows下可以在werl终端下用Ctrl-Break唤出该菜单。它看起来是这样的

其中我们感兴趣的选项是(a)退出系统(硬停机)、(c)返回shell,和(v)打印当前运行的Erlang的版本。其他选项则会打印出计夕尔北记大HJn对大部活动乃至强制关闭任何故障进程,这些信息对调试很有用;(k)还可以让你浏览所有Erlang内部活动乃至强制关闭任何故障进程,前提是你明确知道自己在做什么。注意shell本身感知不到BREAK菜单,因此当你用(c)返回shell时,还得再按一次回车提示符才会刷新。

3.Ctrl-G

第三个同时也是最有用的一个退出方法就是用Ctrl-G唤出用户开关命令菜单。这么做会令Erlang输出这么一段晦涩的文字:
键入h或?并回车,你将看到以下的清单:
在提示符-->下键人c可以返巳shell 键入q会硬停机,就跟BREAK菜单下的(a)一样——别把这个a跟shell函数q( )弄混! 后者对系统更友好。另外注意BREAK菜单位居更底层,你可以在Ctrl-G菜单中唤出BREAK菜单,反之则不行。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode:82. 删除排序链表中的重复元素 II(C++、Java)

目录 82. 删除排序链表中的重复元素 II 题目描述: 实现代码与解析: 链表遍历: 实现代码与解析: 82. 删除排序链表中的重复元素 II 题目描述: 给定一个已排序的链表的头 head , 删除原始链表中所有重复…

美颜技术对比:如何根据项目选择不同的美颜SDK?

各位开发者应该非常清楚,为了在项目中取得最佳效果,选择合适的美颜SDK至关重要。本篇文章,笔者将通过对比不同美颜SDK的关键特性,帮助开发者根据项目需求做出明智的选择。 一、技术原理对比 不同的美颜SDK可能采用不同的技术原理…

汽车线束的汽配企业MES管理系统解决方案

随着科技的飞速发展和环保需求的日益提升,新能源汽车在全球范围内崭露头角,成为未来出行的主导力量。在这股浪潮中,中国凭借其强大的研发实力和市场敏锐度,迅速崛起为新能源汽车领域的佼佼者。而作为汽车数字化控制与智能化应用的…

Unity中URP下的SimpleLit顶点着色器

文章目录 前言顶点着色器1、GPU Instance 相关2、顶点输入数据相关3、雾效混合因子4、对 uv 进行 Tilling 和 Offset 的应用 及 把顶点的坐标信息传给输出结构体5、把法线相关的结果,传给输出结构体6、光照贴图相关7、额外灯相关计算8、阴影相关 前言 在上一篇文章…

elementui-树形控件实现子节点右侧添加图标和数据,鼠标放上去显示文字

1、代码 <el-treev-loading"nameLoding":data"data"node-key"id":highlight-current"true"empty-text"暂无数据":props"defaultPropsIndex"default-expand-all:filter-node-method"filterNodeIndex"…

LeetCode 226. 翻转二叉树

226. 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,…

redis 从0到1完整学习 (十八):阻塞/非阻塞 IO

文章目录 1. 引言2. redis 源码下载3. I/O 模型3.1 阻塞 I/O3.2 非阻塞 I/O 4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&#xff09;&#xff1a;red…

jetlinks 规则编排中的函数节点使用 js 脚本格式化输出当前系统时间的坑

网上搜到的都是类似如下这种&#xff1a; // 获取当前时间 var date new Date();// 格式化输出当前时间 var year date.getFullYear(); var month date.getMonth(); var day date.getDate(); var hour date.getHours(); var minute date.getMinutes(); var second date.…

捷为科技亮相2024深圳PMO年度论坛 探讨项目管理赋能企业数字化转型

1月13日&#xff0c;一场聚焦项目管理创新与数字化转型的盛会——2024年深圳PMO年度论坛在深圳新一代产业园隆重举行。本次论坛以“项目管理赋能企业数字化转型”为主题&#xff0c;汇聚了众多行业专家、学者和企业代表&#xff0c;共同探讨如何通过项目管理推动企业数字化转型…

电商概念之商品模型

1、基本定义 广义定义&#xff1a;商品是为了出售而生产的劳动成果&#xff0c;人类社会生产力发展到一定历史阶段的产物&#xff0c;用于交换的劳动产品。 电商商品基本概念&#xff1a; 商品类目商品属性销售属性商品编码&商品规格编码SKU和SPU… 2、商品类目 电商平…

【动态规划】20子数组系列_环形子数组的最大和_C++(medium)

题目链接&#xff1a;leetcode环形子数组的最大和 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求返回 nums 的非空 子数组 的最大可能和 这道题如果是按照-这道题-是不对…

基于信号完整性的一些PCB设计建议

最小化单根信号线质量的一些PCB设计建议 1. 使用受控阻抗线&#xff1b; 2. 理想情况下&#xff0c;所有信号都应该使用完整的电源或地平面作为其返回路径&#xff0c;关键信号则使用地平面作为返回路径&#xff1b; 3. 信号的返回参考面发生变化时&#xff0c;在尽可能接近…

JMeter笔记(三)

个人学习笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 目录 一&#xff1a;参数化方法 1&#xff09;用户定义的变量 2&#xff09;函数助手 3&#xff09;…

MYSQL的事务隔离

本章概览 mysql是一个支持多引擎的系统&#xff0c;并不是所有引擎都支持事务&#xff0c;本篇以innodb为例解析mysql在事务支持的实现。提到事务一定会想到ACID(Atomicity、Consistency、Isolation、Durability&#xff0c;即原子性、一致性、隔离性、持久性)&#xff0c;今天…

旧路由重置新路由设置新路由设置教程|适用于PPPoE拨号

前言 前几天朋友说路由器想要重置&#xff0c;但不知道怎么弄。所以就想着只帮忙重置路由器的话&#xff0c;只能帮到一个人。但把整个过程写成图文&#xff0c;就可以帮助更多人。 本文章适合电脑小白&#xff0c;请注意每一步哦&#xff01; 注意事项 开始之前需要确认光猫…

pod控制器的作用

pod控制器的作用 1、动态pv和pvc deployment是控制器 pod空气器:工作负载&#xff0c;workload用于管理pod的中间层&#xff0c;确保podi资源符合预期的状态 预期状态 1、副本数 2、容器重启策略 3、镜像拉取策略 pod、出现故障时重启等等 pod的控制器类型 1、replic…

删除运行框中的文件打开历史记录

当我们使用everything、百度、迅雷等软件&#xff0c;在列表中右键选中打开文件夹时。 当使用 winR 快捷键等方式打开运行时&#xff0c;输入盘符会出现之前打开过的文件夹&#xff0c; 一方面展示的特别多会比较混乱&#xff0c;另一方面 记得在之前的window版本中&#xff08…

WIFI7时代正式来临

Wi-Fi联盟在2024年1月8日宣布推出了Wi-Fi CERTIFIED 7认证&#xff0c;标志着WIFI7时代的正式来临&#xff01;这一认证引入了一系列强大的新功能&#xff0c;旨在提升Wi-Fi性能并改善各种连接环境。WIFI7支持多用户AR/VR/XR、沉浸式3D培训、电子游戏、混合工作、工业物联网和汽…

架构师之超时未支付的订单进行取消操作的几种解决方案

今天给大家上一盘硬菜&#xff0c;并且是支付中非常重要的一个技术解决方案&#xff0c;有这块业务的同学注意自己尝试一把哈&#xff01; 一、需求如下&#xff1a; 生成订单30分钟未支付&#xff0c;自动取消 生成订单60秒后,给用户发短信 对上述的需求&#xff0c;我们给…

【算法与数据结构】63、LeetCode不同路径 II

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;参考【算法与数据结构】62、LeetCode不同路径的题目&#xff0c;可以发现本题仅仅是多了障碍物。我们还…