针对Erlang中变量不可变的情况,在程序设计中有哪些技巧
如果一个运算中持续修改变量值,是不断的声明新变量来取代旧变量,还是最好这些数据丢进数据库里做操作?或者说在erlang中,针对这个问题一般的解决思路是怎样的。
比如我在写一个关于战斗的东西,因为里面人物的血量是不断减少的,所以我需要对生命值做频繁修改,还有魔法值的消耗,比如防御力的削弱,在这个运算过程中,里面的每个人物的数值都在不断变化,在erlang这种语言里,怎么来实现呢?
伊吹哈密瓜
11 years, 11 months ago
Answers
你的问题,其实是一开始理解FP时遇到的常见问题,我试着回答一下。
例如在C中要求和:
在erlang中变量是不可以修改的,没有sum += a[i];这样的写法,求和过程实现起来是下面这种样子:
和C有几点不同:
1,函数按照模式匹配定义为多个子句;
2,循环是通过递归方式实现的;
3,和你的问题最相关的一点,变量不可修改,那么变量的值发生变化怎么办?定义新的变量。本例中Acc+H会赋值给新的匿名变量。
具体到你的应用场景中,假设有角色A,对应状态机F,只考虑HP,那么HP将作为F的参数,不断的迭代:
F(0) -> dead;
F(HP) ->
receive
{damage, H} -> F(HP - H);
{heal, H} -> F(HP + H)
end.
start() -> A = spawn(fun() -> F(100) end).
至于你说的数据库操作,当然是可以的,例如通过ETS的表对HP进行存取更新,本质上和在C中直接修改全局变量是差不多的。
不知道回答了你的问题没有,水平有限,欢迎指正。
糟糕D少年
answered 11 years, 11 months ago