【发布时间】:2020-02-16 01:06:37
【问题描述】:
我是 erlang 新手,我的一个模块中的记录出现错误。我在 shipping_state 中模拟船只,我想创建一个简单的函数,根据它的 ID 打印某艘船的船 ID、名称和容器盖。我使用了 list:keyfind,因为我相信它会有所帮助,但也许我没有正确使用它。我有一个包含记录声明的 .hrl 文件,以及一个包含 #shipping_state 的函数和初始化的 .erl 文件。
shipping.erl:
-module(shipping).
-compile(export_all).
-include_lib("./shipping.hrl").
get_ship(Shipping_State, Ship_ID) ->
{id, name, containercap} = list:keyfind(Ship_ID, 1, Shipping_State#shipping_state.ships).
shipping.hrl:
-record(ship, {id, name, container_cap}).
-record(container, {id, weight}).
-record(shipping_state,
{
ships = [],
containers = [],
ports = [],
ship_locations = [],
ship_inventory = maps:new(),
port_inventory = maps:new()
}
).
-record(port, {id, name, docks = [], container_cap}).
结果:
shipping:get_ship(shipping:init(),1).
** exception error: {badrecord,shipping_state}
in function shipping:get_ship/2 (shipping.erl, line 18)
我想说 keyfind 应该可以工作,也许当我创建元组 {id, name, containercap} 时,那里的语法有问题,但如果我需要完全重新考虑我将如何去做这个问题,任何帮助将不胜感激。
编辑, 我已经修改了我的代码以遵循 Alexey 的建议,但是,似乎仍然存在相同的错误。有什么进一步的见解吗?
get_ship(Shipping_State, Ship_ID) ->
{ship, Id, Name, Containercap} = list:keyfind(Ship_ID, 2,
Shipping_State#shipping_state.ships),
io:format("id = ~w, name = ~s, container cap = ~w",[Id, Name, Containercap]).
【问题讨论】:
标签: erlang