http://erlangdisplay.iteye.com/blog/315452

_开头(包括_)在erlang可以是表明,这个变量可以存任意东西,就是我们常说的全匹配,_A一般来说就是表明这个东西我拉出来了,是某某东西,但是我没用到,这一般就用_A,A就是要么就绑定变量,要么就匹配变量咯,这要视乎A有否被绑定过而定。

唯一的区别就是_A你下面没调用 make的时候不会报warnning

如果是A下面没调用 make的时候会报warrning

就这样,_A和_基本上一样的,都是不打算处理或者没有用的匹配占位符,如果怕将来忘记这里到底是什么数据或者有可能调用处理的话就写_Arg1之类。

_A 是为了当不用 _A 这个量时不会报 Variable unuse 的warning ,你之后还是可以使用这个 variable(变量) 的。A就是普通的 variable (变量) 了。

erlang中变量只能一次赋值,这么“苛刻“的要求下,更别想拥有全局变量了。

变量只在function中存在,这就是函数编程语言的特色。

对于函数参数对应的变量从执行函数开始,到函数执行结束(从咱们编程者的角度来看的确如此,至于从运行时,GC的角度看,咱们就不深究了)。

比如下面的函数:

Erlang代码

test1(V) ->

io:format("V is:~p~n", [V]),

% .... other routine

V.

test执行,V进行pattern match,绑定数值,随后进入函数体,执行各种操作。最后test返回,V也就结束了其使命。

如果变量是在函数体内部声明,那么在其声明后知道函数结束均可使用,比如

Erlang代码

test2() ->

% do something

% ....

V = 10,

io:format("V is:~p~n", [V]),

% ....

V.

在erlang中fun也是一种数据类型,如果我在函数中定义一个fun,他们之间的参数关系如何呢?函数中匿名函数的参数会把所在函数的同名参数给屏蔽!

是不是有点罗嗦?看例子:

Erlang代码

test3(V) ->

F = fun(V) -> % 这个V会屏蔽掉test3/1的参数V!

io:format("i'm V in fun:~p~n", [V])

end,

F(1),

F(V).

这里F匿名函数的V会屏蔽掉test3/1的V,如果你真的想使用test3/1的参数怎么办呢?别糊涂了,直接把F匿名函数的参数改个名字就结了,比如F = fun(V2)... 我写代码时还真有糊涂的时候。

关于屏蔽变量,编译器会提醒你:variable 'V' shadowed in 'fun',多么贴心的编译器。(这个对应一个编译器选项:warn_shadow_vars 默认编译存在)

关于变量我还有最后一个注意需要说明,那就是不要写”不安全的变量“,什么意思?看下面这个例子

Erlang代码

test4(V) when is_integer(V) ->

if

V >= 0 ->

T1 = -V;

V

T2 = -V

end,

io:format("T1 is:~p~n", [T1]),

io:format("T2 is:~p~n", [T2]).

如果你编译这个代码片段,编译器肯定要说:

variable 'T1' unsafe in 'if' ...

variable 'T2' unsafe in 'if' ...

人家说,你的T1,T2都不是安全的变量!因为你的T1,T2的存在依赖与V的数值,如果V大于等于0,那么T2就不会绑定数值,如果V小于0,那么T1就不会绑定数值,

因此你的T1和T2都有可能不存在,能让这样的代码编译通过,那erlang肯定是睡着了。怎么修改呢?方法只有一个:让变量安全。

我们让所有的if的子句(guard seq)中都有某个变量,那么不论你在if中执行路径如何,我都能存在就OK了。

Erlang代码

test4(V) when is_integer(V) ->

if

V >= 0 ->

T1 = -V,

T2 = 0;

V

T1 = 0,

T2 = -V

end,

io:format("T1 is:~p~n", [T1]),

io:format("T2 is:~p~n", [T2]).

编译一下,怎么样,我们的T1,T2现在都是安全的变量了吧。

好的,变量作用域相关的介绍暂时就这么多了。

erlang 变量存储在哪里_erlang中变量作用域相关推荐

  1. C语言里的4种存储类别,C语言中变量储存的类别

    C语言中变量储存的类别 C语言根据变量的生存周期来划分,可以划分为静态存储方式和动态存储方式. C语言中变量储存的类别 静态存储方式:是指在程序的运行期间分配固定的存储空间的方式.静态存储区中存储放了 ...

  2. Web前端第三季(JavaScript):三:第1章:JavaScript基本知识:107-js中变量的声明+108-js中变量的注意事项+109-js中变量的命名规则+110-赋值和算术运算符

    目录 一.目的 1.想:学习前端知识 2.想:记录笔记,下次不用看视频,直接看笔记就可以快速回忆. 二.参考 1.我自己代码的GitHub网址 2.SIKI学院:我参考此视频实操 3.w3school ...

  3. linux c变量命名规则,C语言中变量名及函数名的命名规则与驼峰命名法

    在程序设计中,变量名.函数名.数组名等统称为标识 符.简单地说,标识符就是一个名字.除库函数的函数名由系统定义外,其余都由用户自定义.C语言规定,标识符只能由字母(a-z,A-Z).数字 (0-9). ...

  4. erlang 变量存储在哪里_Erlang(3):数据类型与变量

    1.初步尝试控制台的操作.输入 1> a = 20结果没反应... 后来发现erlang的语句是以.号来结尾的.改改: 1> a = 20. ** exception error: no ...

  5. java 静态变量与静态初始化块中变量的初始化顺序

    2019独角兽企业重金招聘Python工程师标准>>> package test;public class Test {//静态变量 aprivate static int a=b( ...

  6. python的变量如何理解_Python程序中变量作用范围应该如何理解?

    初学Python,自己尝试着写了一个爬虫,主要代码如下import json import scrapy from bs4 import BeautifulSoup from docx import ...

  7. python中变量的作用域有几种_Python中变量的作用域(variable scope)

    http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...

  8. python三引号 内部变量_python在三引号中使用变量

    1.定义和运算: 变量名 = 值 定义变量举例: # 定义一个变量 myCar = "比亚迪F0" # 输出一个变量 print(myCar) 变量之间的简单运算举例: price ...

  9. 【C语言进阶深度学习记录】五 C语言中变量的属性

    上一篇文章学习了C语言中的类型转换,点击链接查看:[C语言进阶深度学习记录]四 C语言中的类型转换. 文章目录 1 C语言的变量属性 1.1 auto关键字 1.2 register关键字 1.3 s ...

最新文章

  1. 智慧城市顶层设计方法_主頁
  2. get中添加header
  3. gps导航原理与应用_一文读懂角速度传感器(陀螺仪)的应用场景
  4. ML.NET Cookbook:(17)如何在分类数据上训练模型?
  5. icoding复习7, 8
  6. JavaFX技巧12:在CSS中定义图标
  7. uva 11400——Lighting System Design
  8. 饱和气压与温度的关系_高中物理讲义:固体液体与物态变化第3节《饱和汽与饱和汽压》...
  9. 从入门到入土:[SEED-Lab]-SQL注入攻击|SQL Injection Attack Lab|详细说明|实验步骤|实验截图
  10. Linux系统中文件的访问权限
  11. energy plus matlab,Energyplus教程系列1—Energyplus到底能干啥.ppt
  12. 自制冰箱,冰柜蒸发器和毛细管的速算
  13. 高德地图正确食用方法(持续更新)
  14. jsp mysql企业网站_JSP基于MySQL构建中小企业电子商务网站.pdf
  15. 中国石油大学华东2013-2014-1c语言a卷_答案,中国石油大学(华东)2012—2013学年第二学期期中A卷试卷答案...
  16. 阴阳师夜影诡谈第二天阵容怎么配
  17. 【golang】处理jpeg图片压缩后方向发生变化问题
  18. 2021年中国集成电路市场现状及封测行业重点企业对比分析:通富微电vs华天科技vs长电科技
  19. 一个与众不同的苹果--苹果产品制胜之道
  20. GTSAM中ISAM2和IncrementalFixedLagSmoother说明

热门文章

  1. 二项式定理等价变换与简单推论
  2. 工具类与工具函数 —— 素数相关
  3. 学习 shell —— 相对路径转换为绝对路径
  4. leetcode —— 数组(1. Two Sum)
  5. HBase 的(伪)分布式安装
  6. 华为nova7se乐活版支持鸿蒙,华为nova7se乐活版和畅享20se哪个好 参数区别对比评测...
  7. 你都用python来做什么-你都用 Python 来做什么?
  8. 免费python编程自学网站-免费学习Python编程的3个优秀的网站资源
  9. python零基础学习书-Python零基础到进阶必读的书藉:Python学习手册pdf免费下载
  10. python处理excel的优势-SAS、R、SPSS、python、excel五大软件的比较优势分析