gen_server的规约要求module必须实现init方法,形如:
init([State]) ->
{ok, State}.
对新手来说,这里容易犯的一个错误是误以为参数不是list,于是编写代码为:
init( State ) ->
{ok, State}.
这种错误一般很容易发现,但是对于 State 是 string 的情况则比较隐讳,因为——string也是一个list
今天就遇到一次这个陷阱,记录一下:
init( BaseUrl ) ->
{ok, BaseUrl}.
上面这段代码,没有用中括号,所以传进来的不是string,而是一个 integer 数组,而后续使用代码为:
error_logger:info_msg("callback: ~p.~n",[BaseUrl]),
Url = BaseUrl++"/api/callback",
可以看出,即使打了日志也没用,因为输出的时候一切正常。
检查的方法其实也很简单,用下面的代码就可以判断是 [string] 还是 string:
[X|_] = BaseUrl,
error_logger:info_msg("is integer: ~p.~n",[is_integer(X)])
good luck
分享到:
相关推荐
参数化模块的引入不仅可以帮助开发者避免常见的错误,如通过函数闭包引入的意外闭包状态,而且有助于开发者以更清晰和结构化的方式构建Erlang应用程序。通过这种扩展,Erlang继续保持了其作为构建大型并发和分布式...
我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...
Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心...
Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入...
1. **函数式编程**:Erlang基于函数式编程范式,强调无副作用的纯函数,以及通过数据不可变性来简化并发处理。在Erlang中,程序是由一系列相互独立的函数构成的,它们可以并行执行,提高了系统的性能。 2. **并发与...
若编译失败,系统会给出错误报告,帮助开发者定位并修正问题。 通过以上介绍,我们可以看到,Erlang Shell提供了直观的编程体验,而模块和函数则是构建实际应用的核心机制。掌握这些基础知识,是深入学习Erlang编程...
在Erlang中,函数是第一类公民,可以作为参数传递,也可以作为返回值。此外,Erlang支持模式匹配,使得函数定义可以基于不同的输入模式执行不同的逻辑。 **三、并发与并行** Erlang的并发模型是基于轻量级进程(也...
8. **错误处理**:Erlang鼓励使用“失败-快速”策略,即在检测到错误时立即崩溃,然后由Supervisor树自动重启,以恢复系统的稳定状态。 9. **模式匹配**:Erlang中的模式匹配是其语法的一个强大特性,可以方便地...
错误的编程实践会导致程序运行不稳定,甚至出现无法预料的错误。 所需文档约定部分强调了清晰的文档对于维护和理解大型Erlang程序的重要性。文档不仅包括对程序功能的描述,还应当包含对程序设计思想的解释和对潜在...
如果C函数返回错误,Erlang VM应该能够捕获这个错误并相应地处理。 5. **生命周期管理**:Erlang进程可能会多次加载和卸载NIF,因此需要确保在适当的时候释放资源,如在`load`和`unload`回调中。 在“tu”这个文件...
2. **API更新**:可能对Erlang的内置函数或模块进行增强,提供新的功能或修复已知问题。 3. **兼容性提升**:与先前版本相比,25.0可能增强了与其他软件或框架的兼容性。 4. **错误修复**:解决上一版本中的已知问题...
这些特性使得Erlang在处理高并发和实时性问题上表现出色。 "erlang 中文,chm参考文档"提供了丰富的Erlang学习资源,包括"Erlang手册(5.8.2).chm"和"erlang深度分析.pdf"。这两个文件将帮助你全面理解Erlang的基础...
- **错误处理**:Erlang采用异常处理机制,鼓励编写无副作用的纯函数,有助于编写容错性强的代码。 - **模式匹配**:Erlang的模式匹配功能允许在函数定义中使用模式来匹配和解构数据结构,简化了代码编写。 - **...
**函数式编程**:Erlang是一种函数式语言,函数无副作用,强调纯函数和不可变数据,这有助于编写简洁、可预测的代码。 **动态类型**:Erlang是动态类型的,变量的类型在运行时确定,提供了灵活性。 **及早求值或...
在Erlang中,函数是第一类公民,可以作为参数传递、返回结果,甚至存储在变量中。函数没有副作用,即它们不会改变外部状态,这有助于提高代码的可预测性和可测试性。 **并发与并行处理** Erlang的核心特性之一是其...
4. **动态类型**:Erlang采用动态类型,允许快速开发和迭代,但同时也可能导致运行时错误。 5. **函数式编程**:Erlang是函数式的,强调无副作用的纯函数,以及数据不可变性,这有助于编写简洁、易于理解和测试的...
它支持高阶函数,如函数作为参数、返回值,以及函数式编程常见的map、filter、reduce等操作。 4. **模式匹配**:Erlang的模式匹配允许在函数调用中解构复杂的数据结构,方便地提取所需信息,同时也用于case语句和...