小编Ref*_*fer的帖子

在无形状中,有两个列表,其中一个包含另一个的类型

在无形状中l1,我正在尝试编写一个函数,它需要两个l2具有任意长度的HLists ,它们具有以下属性:

  1. 长度l1l2是一样的.
  2. 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)

使用UnaryTCConstraintLengthAux让我约束长度并需要一个静态外部构造函数l2,但是它们符合它们已经成为一个问题.

关于我如何去做的任何想法?

scala shapeless

8
推荐指数
1
解决办法
346
查看次数

numpy如何处理mmap的npz文件?

我有一个案例,我想使用mmap模式打开一个压缩的numpy文件,但似乎无法找到任何有关它如何在幕后工作的文档.例如,它会解压缩内存中的存档然后mmap吗?它会在飞行中解压缩吗?

该配置缺少该文档.

gzip mmap numpy

7
推荐指数
1
解决办法
2136
查看次数

gen_server关闭侦听套接字

我正在尝试做的是让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-tcp

4
推荐指数
1
解决办法
1977
查看次数

瞬态gen_server处理和更新pids

我目前正在以合理的方式学习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个.

erlang multithreading gen-server

2
推荐指数
1
解决办法
403
查看次数

使用类型类隐式转换为超类型

为什么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)

scala typeclass implicit-cast implicit-conversion

1
推荐指数
1
解决办法
508
查看次数