Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency 二郎市的连通性_Concurrency_Functional Programming_Erlang - Fatal编程技术网

Concurrency 二郎市的连通性

Concurrency 二郎市的连通性,concurrency,functional-programming,erlang,Concurrency,Functional Programming,Erlang,我试图解决的问题如下: 编写一个名为print_message的Erlang函数,该函数不带任何参数。函数应等待接收消息。收到消息时(可以是任何Erlang术语),使用io:format()打印消息。如果42秒过后没有收到消息,请打印一条写着“太晚了”的消息 我为该问题编写的代码如下: print_message() -> receive X -> io:format("~p~n",[X]) after 42000 -&g

我试图解决的问题如下:

编写一个名为print_message的Erlang函数,该函数不带任何参数。函数应等待接收消息。收到消息时(可以是任何Erlang术语),使用io:format()打印消息。如果42秒过后没有收到消息,请打印一条写着“太晚了”的消息

我为该问题编写的代码如下:

    print_message() ->
      receive
       X -> io:format("~p~n",[X])
    after 42000 ->
       io:format("Too late ~n")
    end.
在我的问题中,它说“它可以是任何Erlang术语”。在我的代码中使用X是否满足这一要求?或者我是否需要使用以下参考手册中所述的any()的Erlang内置函数:

您的代码满足要求

Erlang是动态类型的。因此,X的类型将仅在接收到第一条消息时确定,因此它可以是任何Erlang术语

据我所知,我认为不可能在代码中指定X的类型

它在erlang中存在一些类型规范,但用于函数参数、它们的返回值和记录定义


这些类型定义可以在以后的文档中使用,或者由

使用。是的,您的代码满足要求。模式
X
匹配任何Erlang术语

与以下内容比较,只有当传入消息是以
ok
开头的2元组时,才会匹配:

print_message() ->
    receive
        {ok, X} ->
或与此匹配,仅当传入消息为整数时匹配:

print_message() ->
    receive
        X when is_integer(X) ->
或者,只有当传入消息等于函数参数时才匹配:

print_message(X) ->
    receive
        X ->
(由于变量名称相同,这将变成选择性的
receive
,忽略所有其他消息。)


类型规范是Erlang语言的可选部分。您可以指定函数接受整数并返回字符串:

-spec my_function(integer()) -> string().
my_function(N) ->
    ....
然后你们可以使用透析器来检查类型错误

但是,类型规范仅在编译时使用;它们实际上不会在运行时执行任何检查。此外,它们不能用于指定正在发送或接收的消息的类型;只涉及函数参数和返回值