小编Ser*_*nik的帖子

检查两个列表是否包含相同的元素

我有两个函数返回相同大小的结果列表,我试图检查结果是否相同.列表中的顺序可以不同.我目前正在使用以下功能:

lists_are_the_same(List1, List2) ->
    List1 -- List2 =:= [].
Run Code Online (Sandbox Code Playgroud)

此函数从另一个列表中减去一个列表,并检查结果是否为空列表.问题是,这种方法非常慢,在我的情况下,列表可能相当大.

有没有更快的方法来检查两个列表是否由完全相同的元素组成?

erlang equality list

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

从案例警告中导出变量

使用erlang进行开发时,我有时会使用这样的case语句

case Status of
    1 ->
        Variable = "Something";
    2 ->
        Variable = "Something else";
    3 ->
        Variable = {"Something very different", [1,2,3]}
end
Run Code Online (Sandbox Code Playgroud)

根据某些条件为变量赋值.

问题是:如果我在case语句之后使用它:

do_something(Variable),
Run Code Online (Sandbox Code Playgroud)

我收到了编译警告:

Warning: variable 'Variable' exported from 'case'
Run Code Online (Sandbox Code Playgroud)

Erlang根据某些条件为变量赋值并避免此类警告的最佳做法是什么?

erlang warnings case-statement

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

类型[string()]是否覆盖空列表?

定义一个类型,它将是一个字符串列表,但也可以是一个空列表,我是否必须定义这两种情况:

-type my_type() :: [string()] | [].
Run Code Online (Sandbox Code Playgroud)

或者这就够了:

-type my_type() :: [string()].
Run Code Online (Sandbox Code Playgroud)

erlang dialyzer

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

git@github.com:...和https://github.com/...之间的区别?

我最近尝试构建一个项目,该项目具有声明为Github链接的各种依赖项.链接是公共Github存储库和我公司的私有Github Enterprise存储库的链接的混合.

一些链接是格式化的

https://github.com/project/repo.git
Run Code Online (Sandbox Code Playgroud)

还有一些是格式化的

git@github.com:project/repo.git
Run Code Online (Sandbox Code Playgroud)

这些格式之间究竟有什么区别?哪种格式用于什么目的?

git github repository

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

Erlang,返回列表长度的函数?

我正在尝试实现一个功能

llen(ListOfLists)
Run Code Online (Sandbox Code Playgroud)

它返回一个列表,其中包含ListOfLists中列表的长度.函数应该使用列表:map/2.

例:

1> funs:llen([[1, 2, 3], [], [4, 5]]).
[3, 0, 2]
Run Code Online (Sandbox Code Playgroud)

我知道如何计算一个列表的长度:

list([]) -> 0;
list([_|T]) -> 1+list(T).
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用乐趣和列表为多个列表执行此操作.

erlang

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

在长护卫队中去除orelse和andalso

我在erlang中编写一个函数,它应该能够接受不同顺序和不同格式的各种参数集,并且我使用非常严格的防护来确保正确匹配.

我这样写一个长护士并不罕见:

my_fun(List, Number, OptionalList, Record)
when is_list(List) andalso length(List) >= 5, 
     is_integer(Number) andalso Number >= 10 andalso Number =< 50 orelse Number =:= undefined, 
     is_list(OptionalList) orelse OptionalList =:= undefined, 
     is_record(Record, my_record) ->
Run Code Online (Sandbox Code Playgroud)

我在这里使用的是orelse,而且它使得代码的可读性差得多,而且通常更长.

有没有办法实现相同的保护逻辑使用,和; 只要?

erlang

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

通过名称和arity调用函数

我正在尝试编写一个函数来调用具有指定名称和arity的函数:

my_fun(FunctionName, Arity) ->
    %Call FunctionName/Arity 
.
Run Code Online (Sandbox Code Playgroud)

所以这样调用它:

my_fun(foo, 3)
Run Code Online (Sandbox Code Playgroud)

应该导致调用函数foo/3.

问题是,如果只指定了其名称和arity,我不知道如何调用函数.我试图调用的函数保证存在于我试图调用它的同一模块中.

是否可以在Erlang中实现这一点,以及如何实现?

erlang function arity

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