【问题标题】:Pid as erlang maps key?Pid作为erlang映射键?
【发布时间】:2015-05-18 16:14:56
【问题描述】:

Pid 可以是地图键吗?

从 #{} 语法构建映射,错误提示 Pid 不能是键。

使用地图模块构建错误,Pid 可以是关键。

18> 
18> Pid = self().
<0.39.0>
19> #{Pid => 1}.
* 1: illegal use of variable 'Pid' in map
20> 
20> M1 = maps:from_list([{Pid, 1}]).
#{<0.39.0> => 1}
21> 
21> #{Pid := V} = M1.
* 2: illegal use of variable 'Pid' in map
22>                  
22> maps:get(Pid, M1).
1

【问题讨论】:

  • 当key是变量时可以使用maps:put(Pid, V, M)

标签: erlang


【解决方案1】:

“Erlang 18(候选版本 2)”中已经提供了对映射模式中任意键的支持。

$ erl
Erlang/OTP 18 [RELEASE CANDIDATE 2] [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
1> Pid = self().
<0.33.0>
2> #{Pid => 1}.
#{<0.33.0> => 1}

【讨论】:

    【解决方案2】:

    问题不在于使用 pid,而在于使用变量作为映射定义中的键。还没有实现(也不知道什么时候可以实现)。

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 2018-02-02
      • 1970-01-01
      • 2012-07-26
      • 2018-10-02
      • 2012-01-23
      • 2019-01-18
      • 2015-10-20
      • 2019-08-22
      相关资源
      最近更新 更多