这是我的kvs.erl:
-module(kvs).
-export([start/0, store/2, lookup/1]).
start() -> register(kvs, spawn(fun() -> loop() end)).
store(Key, Value) -> rpc({store, Key, Value}).
lookup(Key) -> rpc({lookup, Key}).
rpc(Q) ->
kvs ! {self(), Q},
receive
{kvs, Reply} ->
Reply
end.
loop() ->
receive
{From, {store, Key, Value}} ->
put(Key, {ok, Value}),
From ! {kvs, true},
loop();
{From, {lookup, Key}} ->
From ! {kvs, get(Key)},
loop()
end.
当我启动erlang时使用:erl -name zhao -setcookie abc
然后:rpc:call(fifar @ huihua.sohu-inc.com,kvs,store,[weather,cold])。
显示错误:
(zhao@zjm1126.sohu-inc.com)1> rpc:call(fifar@huihua.sohu-inc.com,kvs,store,[weather,cold]).
** exception error: bad argument in an arithmetic expression
in operator -/2
called as 'fifar@huihua.sohu' - 'inc.com'
我认为这是关于linux主机名,
但是我使用这个linux shell:hostname -a
它不能显示“huihua.sohu-inc.com”
所以我该怎么做,
感谢
答案 0 :(得分:5)
查看错误描述,您在二进制运算符“ - ”上有错误。你只需要改变
(zhao@zjm1126.sohu-inc.com)1> rpc:call(fifar@huihua.sohu-inc.com,kvs,store,[weather,cold]).
到
(zhao@zjm1126.sohu-inc.com)1> rpc:call('fifar@huihua.sohu-inc.com',kvs,store,[weather,cold]).
您将运行代码。 Erlang控制台将 fifar@huihua.sohu 和 inc.com 视为两个不同的原子,并将 fifar@huihua.sohu-inc.com 视为两个原子之间的差异操作。我建议你按照erlang reference manual:
的引用原子是文字,是名称的常量。如果原子不以小写字母开头,或者包含除字母数字字符,下划线(_)或@之外的其他字符,则应用单引号(')括起来。