什么';Erlang中的确切类型数是多少?

什么';Erlang中的确切类型数是多少?,erlang,Erlang,除了可以在其他语言中找到的数据原语和结构之外,Erlang中的完整类型列表是什么 例如,套接字句柄的类型是什么?那ets手柄呢 此外,哪些类型不可能在节点之间序列化和交换?我想插座手柄一定是其中之一,对吧 即使在同一节点内的进程之间,套接字句柄也是共享的,对吗?这是不分享原则的例外吗 GC对这些共享内容的行为是什么?Erlang中的套接字实现是什么?我认为它不是一个端口,对吗?erlang中的类型很少,您可以参考erlang模块的函数is_???(Term)来获得内置基本类型的列表: 原子 位

除了可以在其他语言中找到的数据原语和结构之外,Erlang中的完整类型列表是什么

例如,套接字句柄的类型是什么?那ets手柄呢

此外,哪些类型不可能在节点之间序列化和交换?我想插座手柄一定是其中之一,对吧

即使在同一节点内的进程之间,套接字句柄也是共享的,对吗?这是不分享原则的例外吗


GC对这些共享内容的行为是什么?Erlang中的套接字实现是什么?我认为它不是一个端口,对吗?

erlang中的类型很少,您可以参考erlang模块的函数is_???(Term)来获得内置基本类型的列表:

  • 原子
  • 位串
  • 浮动
  • 作用
  • 整数
  • 名单
  • 地图
  • pid
  • 港口
  • 参考文献
  • 元组
第二个列表是从基本类型派生的:

  • 二进制:大小为字节大小倍数的位字符串
  • 布尔:原子的真与假
  • 数字:整数或浮点数
  • 记录:一个元组,其第一项是表示记录名称的原子(编译器使用记录定义通过符号而不是索引访问元组的不同元素)

然后,您可以考虑基于这些基本类型的任何组合来创建无限数量的类型。在某些程序中,您将看到一些声明,例如:

-type orddict() :: [{Key :: term(), Value :: term()}].

这些信息不是Erlang编译器直接使用的,它们由外部工具(如拨号器)使用,并且不是获取有效代码的必需信息。Erlang的主要特性不是类型声明,而是模式匹配。因此,如果调用函数并期望返回值的形式为
{ok,value}
{error,Reason}
,您将编写如下代码:

Result = case f(Par) of
    {ok,Value} -> resultWhenOk(Value);
    {error,Reason} -> resultWhenError(Reason)
end;
或者,如果您不关心错误管理:

% get the Name and Age of the employee whose id is Id in a list of people List
% using a function that return a tuple of the form
% {PeopleType, Id, Name,Surname,Age,Sex}
{ok,{employee,Id,Name,_,Age,_}} = find_people(Id,List);

erlang中的类型很少,您可以参考erlang模块的函数is_???(Term)来获得内置基本类型的列表:

  • 原子
  • 位串
  • 浮动
  • 作用
  • 整数
  • 名单
  • 地图
  • pid
  • 港口
  • 参考文献
  • 元组
第二个列表是从基本类型派生的:

  • 二进制:大小为字节大小倍数的位字符串
  • 布尔:原子的真与假
  • 数字:整数或浮点数
  • 记录:一个元组,其第一项是表示记录名称的原子(编译器使用记录定义通过符号而不是索引访问元组的不同元素)

然后,您可以考虑基于这些基本类型的任何组合来创建无限数量的类型。在某些程序中,您将看到一些声明,例如:

-type orddict() :: [{Key :: term(), Value :: term()}].

这些信息不是Erlang编译器直接使用的,它们由外部工具(如拨号器)使用,并且不是获取有效代码的必需信息。Erlang的主要特性不是类型声明,而是模式匹配。因此,如果调用函数并期望返回值的形式为
{ok,value}
{error,Reason}
,您将编写如下代码:

Result = case f(Par) of
    {ok,Value} -> resultWhenOk(Value);
    {error,Reason} -> resultWhenError(Reason)
end;
或者,如果您不关心错误管理:

% get the Name and Age of the employee whose id is Id in a list of people List
% using a function that return a tuple of the form
% {PeopleType, Id, Name,Surname,Age,Sex}
{ok,{employee,Id,Name,_,Age,_}} = find_people(Id,List);

套接字为端口类型,在内置驱动程序中实现

在同一节点内,套接字可以被多个进程共享;所有进程都可以调用套接字,当所有者进程退出时,套接字将关闭


我尝试将套接字发送到远程进程(在另一个节点中),当远程进程尝试访问套接字时,例如send(),它将引发一个错误,原因是“已关闭”。

套接字为端口类型,在内置驱动程序中实现

在同一节点内,套接字可以被多个进程共享;所有进程都可以调用套接字,当所有者进程退出时,套接字将关闭

我尝试将套接字发送到远程进程(在另一个节点中),当远程进程尝试访问套接字时,例如send(),它将引发一个错误,原因是“closed”