小编Ada*_*erg的帖子

在Vim中按括号列索引缩进代码?

我正在使用Vim来编辑Erlang代码.我习惯(大多数Erlang程序员这样做)通过它们所在的括号范围缩进Erlang代码.例如,C通常在大括号内缩进一个制表符宽度:

int main(void) {
    printf("hello, world\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在Erlang中,基于括号开始的列缩进是很常见的:

?assertError({bad_options, [{foo, bar},
                            bad_option]},
             lhttpc:request("http://localhost/", get, [], <<>>, 1000,
                            [bad_option, {foo, bar}])).
Run Code Online (Sandbox Code Playgroud)

(上面的例子是缩进的,以获得重点,而不是根据主观美).

如果块在新行上启动,则将使用制表符宽度:

?assertError(
    {bad_options, [{foo, bar}, bad_option]},
    lhttpc:request(
         "http://localhost/", get, [], <<>>, 1000,
         [bad_option, {foo, bar}]
    )
).
Run Code Online (Sandbox Code Playgroud)

我的.vimrc的相关部分:

set expandtab " Spaces for tabs "
set tabstop=4 " Tab width 4 "
set shiftwidth=4
set smarttab
set autoindent

" Enable filetype plugin "
filetype plugin on
filetype indent on
Run Code Online (Sandbox Code Playgroud)

有没有办法在Vim中执行此缩进,如果是,如何?

vim erlang indentation

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

如何为类的实例定义默认属性列表?

我的程序中有一些对象,每个对象大约有10-15个属性.这些属性在程序的各个阶段设置在代码中的不同位置.因为在没有在Python的类中定义它们的情况下将它们设置在对象上是绝对正确的,所以在我的程序中没有使用哪些属性的良好权威列表.

我喜欢以下内容:

class MyObject(object):
    attr1
    attr2
Run Code Online (Sandbox Code Playgroud)

我看过property()内置的,但每个属性至少有6行代码.有没有一种简单的方法来定义默认属性列表而无需在Python中初始化它们?

更新:我忘了提及,大多数值没有合理的默认值,并且None在使用之前实际上等于.

python attributes properties

6
推荐指数
2
解决办法
4892
查看次数

为列出表和索引大小简化Postgres SQL查询?

以下Postgres SQL查询将列出所有模式及其大小和索引大小的所有表.如果表只是一个索引表,它将显示为100%索引.

SELECT schema,
       name,
       pg_size_pretty(CASE WHEN is_index THEN 0 ELSE s      END) AS size,
       pg_size_pretty(CASE WHEN is_index THEN s ELSE st - s END) AS index,
       CASE WHEN st = 0   THEN 0
            WHEN is_index THEN 100
                          ELSE 100 - ((s*100) / st) END || '%' as ratio,
       pg_size_pretty(st) as total
  FROM (SELECT *,
               st = s AS is_index
          FROM (SELECT nspname as schema,
                       relname as name,
                       pg_relation_size(nspname || '.' || relname) as s,
                       pg_total_relation_size(nspname || '.' || relname) …
Run Code Online (Sandbox Code Playgroud)

sql postgresql postgresql-9.1

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

当两个客户端同时调用gen_server方法时会发生什么?

我有一个gen_server模块,当客户端进程发送数据时,它会将数据记录到文件中.当两个客户端进程同时向此模块发送数据时会发生什么?文件操作是否会相互冲突?这里的erlang文档令人沮丧.

erlang gen-server

5
推荐指数
2
解决办法
1864
查看次数

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
查看次数