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

news2024/11/20 2:45:04

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.coloradmin.cn/o/1385637.html

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

相关文章

【极光系列】SpringBoot集成Mybatis

【极光系列】SpringBoot集成Mybatis 一.gitee地址 浅夏的猫 shawsongyue 直接下载可用 https://gitee.com/shawsongyue/aurora.git 二.mysql安装教程 详细参考我的另外一遍博客: https://blog.csdn.net/weixin_40736233/article/details/135582926?spm1001.201…

Hologres + Flink 流式湖仓建设

Hologres Flink 流式湖仓建设 1 Flink Hologres2 实时维表 Lookup 1 Flink Hologres holo在实时数仓领域非常受欢迎,一般搭配flinkhologres来做实时数仓,中间分层用holo,上下游一般依赖于holo的binlog来下发数据 2 实时维表 Lookup Holo…

计算机毕业设计-----SSH高校科研管理系统平台

项目介绍 本项目包含超级管理员、管理员、教师三种角色; 超级管理员角色包含以下功能: 登录,教师管理,管理员管理等功能。 管理员角色包含以下功能: 登录,专业参赛奖项管理,科技论文发表管理,出版专业著作管理,科研项目立项管理,科研项目结…

USB-C一线通桌面显示器你有见过么?

新型的TYPE-C接口桌面显示器,宛如一位多才多艺的艺术家,它不仅精于视频传输,更在充电领域展现出无与伦比的才华。不同于传统的显示器,它化平凡为神奇,将显示器的DC电源巧妙地转换成PD协议,为各种设备提供稳…

APP加固原理与作用

目录 引言 正文 1. 什么是APP加固,加固原理是什么? 2. 加固的作用是什么?加固后是否完全不会被破解? 3. 如何提前规避加固新版本可能带来的风险? 4. 付费加固与免费加固的区别是什么? 白嫖的混淆加密…

docker部署Jira+配置MySQL8数据库

写在前面:如果你通过docker安装Jira且启动过,然后你现在又想使用mysql数据库,需要注意 你除了停掉原有容器,还需要删除:/var/lib/docker/volumes/jiraVolume/_data下的文件,否则启动后会无法正常使用。注意…

【EI会议征稿通知】第四届图像处理与智能控制国际学术会议(IPIC 2024)

第四届图像处理与智能控制国际学术会议(IPIC 2024) 2024 4th International Conference on Image Processing and Intelligent Control 2024年第四届图像处理与智能控制国际学术会议(IPIC 2024)将于2024年5月3日-5日在吉隆坡举…

ECharts 多季度连续显示到一个图中。

效果图 二.相关option 以下option可以复制到 echarts的编辑器 进行查看修改 const site test1; const site2 test2;const qtrlyOption function (data: any, titleText: string): any {//获取最大值 。最大最小值的目的是:使左右里边的所有bar使用同一个指标let …

Java实现农村物流配送系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理:2.2.2 位置信息管理:2.2.3 配送人员分配:2.2.4 路线规划:2.2.5 个人中心:2.2.6 退换快递处理:…

SpringCloud.04.熔断器Hystrix( Spring Cloud Alibaba 熔断(Sentinel))

目录 熔断器概述 使用Sentinel工具 什么是Sentinel 微服务集成Sentinel 配置provider文件,在里面加入有关控制台的配置 实现一个接口的限流 基本概念 重要功能 Sentinel规则 流控规则 简单配置 配置流控模式 配置流控效果 降级规则 SentinelResource…

设计模式-委托模式

设计模式专栏 模式介绍模式特点应用场景委托模式在GUI编程场景的应用代码示例Java实现委托模式Python实现委托模式 委托模式在spring中的应用 模式介绍 委托模式是一种软件设计模式,其中一个对象(委托对象)将某些操作委托给另一个对象&#…

关于如何禁用、暂停或退出OneDrive等操作,看这篇文件就够了

​想知道如何禁用OneDrive?你可以暂停OneDrive的文件同步,退出应用程序,阻止它在启动时打开,或者永远从你的机器上删除该应用程序。我们将向你展示如何在Windows计算机上完成所有这些操作。 如何在Windows上关闭OneDrive 有多种方法可以防止OneDrive在你的电脑上妨碍你。…

护眼灯有蓝光吗?防蓝光护眼台灯推荐

护眼台灯是家长为孩子购买的常见用品之一,但对于它的了解却不够深入,很多人购买之后反而容易出现眼睛疲劳、不适的情况!据了解,主要的原因是因为在选择护眼台灯时,大多数人没有专业知识,没有买到合适的护眼…

Windows10 Docker Desktop安装

一、简介 Docker Desktop是Docker公司推出的一款桌面应用程序,它提供了一个用户友好的界面,方便开发人员在本地环境中使用容器技术。 容器是一种轻量级的虚拟化技术,可以将应用程序和其依赖项打包在一起,形成一个独立、可移植的…

每日一题——LeetCode1200.最小绝对差

方法一 个人方法 排序一次遍历: 最小差值一定是出现在大小相邻的两个元素之间,所以将数组从小到大排序 循环求两元素之间的差值,先假设当前差值为最小差值,先往res数组里面push数据,当碰到更小差值的时候&#xff0c…

acwing BFS

BFS BFS 重点就是要使用 队列 进行每一层的搜索不同题目 队列中保存的元素形式都各不相同,并且也会用到其他辅助结构走迷宫一题,队列中存的是每一层(当前步能走的所有坐标)的坐标,并保存了每一层对应走过的步数八数码一题,队列中…

Android Traceview 定位卡顿问题

Traceview 是一个 Android 性能分析工具,用于时间性能分析,主要帮助开发者了解应用程序中各个方法的执行时间和调用关系。Traceview 可以通过图形化界面查看应用程序的代码执行细节,包括每个方法的调用次数、方法调用的时间消耗、方法调用堆栈…

家政服务小程序搭建,有什么优势?

随着我国社会经济的发展,家政服务成为了每个家庭的一部分。家政服务的种类也逐渐多样,满足了大众日益增加的服务需求。 不过,传统的家政行业以中介为主,雇主在找到适合的家政人员较为麻烦,限制了家政行业的发展&#…

【基于 InternLM 和 LangChain 搭建你的知识库】学习笔记

学习参考文档【基于 InternLM 和 LangChain 搭建你的知识库】 学习参考链接【书生・浦语大模型实战营第三课作业(基础进阶)】 理论 实战 收集原始数据 收集2018年-2020年几年间的优秀数学建模论文 修改脚本文件,测试文件 作业 复现课程知识库助手搭建过程 La…

曲线生成 | 图解贝塞尔曲线生成原理(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 贝塞尔曲线的应用2 图解贝塞尔曲线3 贝塞尔曲线的性质4 算法仿真4.1 ROS C仿真4.2 Python仿真4.3 Matlab仿真 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法…