erlang的强数据类型

在mailist中,一位朋友表示疑问,为什么下面的语句提示出错?erlang的运行时数据绑定有什么特殊规则?

>{ok, File} = file:open("test.file", [write, raw, {delayed_write, math:pow(10, 3), 1000)]).
** exception error: no match of right hand side value {error,badarg}


提示badarg,参数错误。
其实不是运行时绑定有什么问题,而是math:pow/2返回的数据类型为float, 而file:open/2中的tuple的第二个element需要类型为integer,因此就出现了badarg错误。
修正办法:可以通过trunc/或者round/1将float转化为integer(trunc是将小数部分舍弃,而round是四舍五入,具体参看erlang模块), 当然更聪明的办法就是去掉math:pow/2这样的测试代码。

顺便说一下上例中file:open/2的{delayed_write, Size, Delay}的涵义,这是指要求将数据延迟写入文件,只有当数据达到Size字节,或者数据已经存活了Delay毫秒。具体参看file module.

在erlang中是没有c++中类似的隐式类型转换,这样做的目的是为了使语言简单,便于调试开发。
erlang是如此透彻,坚定。你只要掌握有限的几种数据类型,掌握功能强大的模式匹配,明白变量的一次数值绑定,勤写代码,勤看文档。
不要多久,你也可以写出简单,高校,易读的erlang应用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值