在无形状中l1,我正在尝试编写一个函数,它需要两个l2具有任意长度的HLists ,它们具有以下属性:
l1和l2是一样的.l2包含l1在常量外部类型构造函数中包含的确切类型.所以,如果l1是的话
1 :: 1.2 :: "hello" :: HNil`
Run Code Online (Sandbox Code Playgroud)
l2 可能
Ordering[Int] :: Ordering[Double] :: Ordering[String] :: HNil
Run Code Online (Sandbox Code Playgroud)
使用UnaryTCConstraint并LengthAux让我约束长度并需要一个静态外部构造函数l2,但是它们符合它们已经成为一个问题.
关于我如何去做的任何想法?
我有一个案例,我想使用mmap模式打开一个压缩的numpy文件,但似乎无法找到任何有关它如何在幕后工作的文档.例如,它会解压缩内存中的存档然后mmap吗?它会在飞行中解压缩吗?
该配置缺少该文档.
我正在尝试做的是让gen_server进程接受一个新客户端并立即生成一个新子进程来处理下一个客户端.我看到的问题是,当套接字完成并因此终止时,它也会关闭监听套接字,我无法找出原因,即使它不再引用它.
知道我做错了什么吗?
gen_server:
-module(simple_tcp).
-behaviour(gen_server).
%% API
-export([start_link/1, stop/0, start/0, start/1]).
%% gen-server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
-define(SERVER, ?MODULE).
-define(DEFAULT_PORT, 1055).
-record(state, {port, lsock}).
start_link({port, Port}) ->
gen_server:start_link(?MODULE, [{port, Port}], []);
start_link({socket, Socket}) ->
gen_server:start_link(?MODULE, [{socket, Socket}], []).
start({port, Port}) ->
simple_tcp_sup:start_child({port, Port});
start({socket, Socket}) ->
simple_tcp_sup:start_child({socket, Socket}).
start() ->
start({port, ?DEFAULT_PORT}).
stop() ->
gen_server:cast(?SERVER, stop).
% Callback functions
init([{port, Port}]) ->
{ok, LSock} = gen_tcp:listen(Port, [{active, true},{reuseaddr, true}]),
init([{socket, LSock}]);
init([{socket, Socket}]) ->
io:fwrite("Starting server with …Run Code Online (Sandbox Code Playgroud) 我目前正在以合理的方式学习Erlang,但对主管的gen_server有疑问.如果gen_server进程崩溃并由主管重新启动,它将收到一个新的pid.现在,如果我希望其他进程通过Pid引用该进程,该怎么办?在这些流程中"更新"Pid有哪些好的惯用方法?
作为一个实际应用的练习,我正在编写一个锁定服务器,客户端可以使用任意键请求锁定.理想情况下,我希望有一个单独的进程来处理特定锁的锁定和释放,这个想法是我可以使用gen_server中的timeout参数来终止进程,如果在N个时间之后没有人请求它,那么只有当前相关的锁将留在内存中.现在,我有一个目录进程,它将锁名称映射到锁进程.当锁定进程终止时,它会从目录中删除锁定.
我关心的是如何处理客户端在锁定进程正在终止时请求锁定的情况.它还没有关闭,所以嗅到pid活着是行不通的.锁定进程尚未到达从目录中删除它的子句.
有没有更好的方法来处理这个?
编辑
目前有两个gen_servers:'directory'维护一个来自LockName - > Lock Process的ETS表,以及'lock servers',它们使用start_child动态添加到监督树.理想情况下,我希望每个锁服务器直接处理与客户端的通话,但我担心当进程处于崩溃中时,获取/释放获取/释放请求的场景(因此将不会响应)消息).
从{local}或{global}开始将无效,因为可能有N个.
为什么foo1失败而foo2成功?编译器不应该自动检查Blah的所有超类型吗?
trait Foo[A] {
def bar: A
}
trait Bleh;
case class Blah extends Bleh;
implicit object BlehFoo extends Foo[Bleh]
def foo1[A:Foo](a:A) = a
def foo2[A,B:Foo](a:A)(implicit aToB: A => B) = aToB(a)
// Shouldn't it automatically use Bleh?
foo1(Blah())
// Failure: could not find implicit value for evidence parameter of type Foo[Blah]
foo2(Blah())
// Success: Bleh = Blah()
Run Code Online (Sandbox Code Playgroud)