Function 传递多个参数
我试图将现有的C函数转换为Erlang,但在理解它的工作原理时遇到了一些困难。假设我在C中有以下函数:Function 传递多个参数,function,variables,module,erlang,Function,Variables,Module,Erlang,我试图将现有的C函数转换为Erlang,但在理解它的工作原理时遇到了一些困难。假设我在C中有以下函数: void(int *x,int *y,int z,int a) { if(z<a) { *x = z + a; *y = z - a; } } void(int*x,int*y,int z,int a) { 如果(z您可以返回一个元组,如:{X,Y} 以下是一个函数,它将作为输入的两个值加倍: -modul
void(int *x,int *y,int z,int a)
{
if(z<a)
{
*x = z + a;
*y = z - a;
}
}
void(int*x,int*y,int z,int a)
{
如果(z您可以返回一个元组,如:{X,Y}
以下是一个函数,它将作为输入的两个值加倍:
-module(my_module).
-export([doubleus/2]).
doubleus(X, Y) ->
{X*2, Y*2}.
在外壳中:
1> c(my_module).
{ok, my_module}
2> {A, B} = my_module:doubleus(3,4).
{6, 8}
使用指针操作-意味着您可以更改内存中某个位置的状态(对于顺序流来说,这并不坏)
但在并发环境中,这可能会间接地在每个进程中导致不可预知的更改,这些更改指向该位置(特别是在竞争条件下)
这就是为什么Java中有这么多面向并发的机制
但这不是Erlang的方式。一般来说,Erlang中没有指针,也没有共享内存
您可以存储状态,例如,在tuple{X,Y,Z,A}
中,并将其从一个函数传递到另一个函数。有时您的函数将返回新的状态元组
在上述上下文中,您的函数可能如下所示:
-module( my_module ).
-export( [ f/1 ] ).
f( { _X, _Y, Z, A } ) when Z < A -> { Z + A, Z - A, Z, A };
%% othervise - don't change the state
f( State ) -> State.
-模块(my_模块)。
-出口([f/1])。
f({ux,{uy,Z,A})当Z{Z+A,Z-A,Z,A};
%%othervise-不要更改状态
f(状态)->状态。