标签: elixir

将新元素添加到列表中

我试图将一个新元素添加到列表中,如下所示:

iex(8)> l = [3,5,7,7,8] ++ 3
[3, 5, 7, 7, 8 | 3]
iex(9)> l
[3, 5, 7, 7, 8 | 3]
Run Code Online (Sandbox Code Playgroud)

为什么我会像第五名一样获得第五名

8 | 3
Run Code Online (Sandbox Code Playgroud)

它的意思是什么?
如何在列表中添加新元素?

-------- 更新 --------
我尝试循环列表如下:

iex(2)> l = [1,2] ++ 3
[1, 2 | 3]
iex(3)> Enum.each(l, fn(x) -> IO.puts(x) end)
1
2
** (FunctionClauseError) no function clause matching in Enum."-each/2-lists^foreach/1-0-"/2
    (elixir) lib/enum.ex:604: Enum."-each/2-lists^foreach/1-0-"(#Function<6.54118792/1 in :erl_eval.expr/5>, 3)
    (elixir) lib/enum.ex:604: Enum.each/2
Run Code Online (Sandbox Code Playgroud)

由于数字2的指针不是指向列表而是指向值3,我如何循环列表?

elixir

43
推荐指数
4
解决办法
5万
查看次数

如何在Phoenix/Elixir中读取配置变量?

我想在my/config/config.exs文件中设置我的应用程序的标题:

config :my, My.Endpoint,
  url: [host: "localhost"],
  root: Path.dirname(__DIR__),
  secret_key_base: "secret",
  title: "My App"
Run Code Online (Sandbox Code Playgroud)

我怎样才能读到title以后在模板中使用它?就像是:

<div>
  Title of my app is <%= ??? %>
</div>
Run Code Online (Sandbox Code Playgroud)

我试过conn.title,它说没有这样的钥匙.但是,当我尝试conn.secret_key_base它的时候.为什么?

elixir phoenix-framework

43
推荐指数
4
解决办法
2万
查看次数

如何使用原始sql与ecto回购

我有一个upsert要求,所以我需要调用postgres存储过程或使用公用表表达式.我还使用pgcrypto exgtension进行密码,并希望使用postgres函数(例如"crypt"来编码/解码密码).

但是我无法找到一种方法让Ecto部分或全部使用原始sql,它是否意味着ecto只支持elixir dsl并且当dsl不够时不允许shell-out到原始sql?

我发现我可以通过适配器查询(Rocket是应用程序的名称)

q = Ecto.Adapters.Postgres.query(Rocket.Repo,"select * from users limit 1",[])
Run Code Online (Sandbox Code Playgroud)

但不确定如何将其转化为模型.我是elixir的新手,似乎我应该可以使用Ecto.Model.Schem.schema/3但是失败了

Rocket.User.__schema__(:load,q.rows |> List.first,0)
** (FunctionClauseError) no function clause matching in Rocket.User.__schema__/3    
Run Code Online (Sandbox Code Playgroud)

elixir ecto

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

如何在Elixir中将函数作为参数传递?

如何将函数指定为Elixir中另一个函数的参数?例如,将foo传递给bar,以便bar可以调用foo.调用函数和接收它的函数的语法是什么?

elixir

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

Docker上的Erlang/Elixir和热代码交换

Erlang(以及定义为Elixir)的一个特性是你可以进行热代码交换.但是,对于Docker来说,这似乎很奇怪,你需要停止你的实例并用新图像重新启动新实例.这基本上似乎是每个人都做的.

话虽如此,我也知道可以使用一个隐藏节点通过网络将更新分发给所有其他节点.当然,就像这样听起来像是在寻找麻烦,但......

我的问题如下:有没有人尝试并成功地为Erlang/Elixir设置基于Docker的基础设施,允许热代码交换?如果是这样,做什么,不该做什么和注意事项是什么?

erlang elixir docker

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

函数行为不一致

我正在尝试一个square和一个cube功能.为什么squarecube爆炸时工作?

square = &1 * &1
square.(5)
Run Code Online (Sandbox Code Playgroud)

工作正常

cube = &1 * &1 * &1
cube.(5)
Run Code Online (Sandbox Code Playgroud)

抛出

** (ArithmeticError) bad argument in arithmetic expression
    :erlang.*(#Function<erl_eval.6.82930912>, 5)
    erl_eval.erl:572: :erl_eval.do_apply/6
    src/elixir.erl:133: :elixir.eval_forms/3
    /private/tmp/elixir-OVih/elixir-0.8.2/lib/iex/lib/iex/server.ex:19: IEx.Server.do_loop/1
Run Code Online (Sandbox Code Playgroud)

elixir

40
推荐指数
2
解决办法
2178
查看次数

如何将匿名函数传递给Elixir中的管道

我想写这样的代码:

def boundary do
  :crypto.rand_bytes(8)
  |> Base.encode16
  |> &("--------FormDataBoundary" <> &1)
end
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

elixir

40
推荐指数
2
解决办法
7169
查看次数

什么是"pin"运算符,Elixir变量是否可变?

目前正试图了解Elixir中的"^"运算符.来自网站:

当没有兴趣重新绑定变量而是匹配匹配之前的值时,可以使用pin运算符^:

来源 - http://elixir-lang.org/getting_started/4.html

考虑到这一点,您可以将新值附加到符号,如下所示:

iex> x = 1  # Outputs "1"
iex> x = 2  # Outputs "2"
Run Code Online (Sandbox Code Playgroud)

我也可以这样做:

iex> x = x + 1  # Outputs "3"!
Run Code Online (Sandbox Code Playgroud)

所以我的第一个问题是; Elixir变量是否可变? 看起来确实如此......在函数式编程语言中,这应该是不可能的?

所以现在我们来到"^"运算符......

iex> x = 1  # Outputs "1"
iex> x = 2  # Outputs "2"
iex> x = 1  # Outputs "1"
iex> ^x = 2 # "MatchError"
iex> ^x = 1  # Outputs "1"
Run Code Online (Sandbox Code Playgroud)

我认为"^"的效果是将"x"锁定到绑定到它的最后一个值.这就是它的全部吗?为什么不确保所有'匹配'/赋值都像Erlang本身一样不可变?

我刚刚习惯了......

erlang functional-programming immutability elixir variable-assignment

40
推荐指数
2
解决办法
5646
查看次数

为什么Elixir的Access行为不是协议?

在最新版本的Elixir中,Access不再作为协议实现,而是作为一种行为实现.从我收集的内容来看,这种变化是出于开发模式中的性能考虑.

现在,看一下实现,我想知道这是如何在内部工作的,以及为什么选择这个实现.正如我们在这里看到的,Access通过底层映射的"__struct__"键调度到struct的模块.AFAICS,这大致类似于OOP风格的多态.关于这个的一些问题:

  1. 为什么这会更快?
  2. 与协议相比有哪些缺点?据我所知,它不太可扩展.还有其他吗?
  3. 到目前为止,我只看到像GenServer这样的东西的行为,其中回调模块在初始化时捕获并保存在一个进程中(至少我假设同样多).这里,Access行为从数据中获取回调模块.是否有可能为不是结构的东西实现这种行为?
  4. 当人们对协议给出的额外好处不感兴趣时​​,这种调度是Erlang还是Elixir的常见最佳实践?

elixir

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

无法找到相对于目录"web/static/js"的预设"es2015"

我正在尝试使用elixir和phoenix构建一个流浪服务器,但是在安装了所有需求和依赖项之后,并且在运行时mix phoenix.server我收到以下错误:

错误:编译'web/static/js/app.js'失败.无法找到相对于目录"web/static/js"的预设"es2015";

我不确定这里的'预设'的背景,我希望一个更有经验的凤凰用户会知道它的内容.

一些粗略的谷歌给了我什么,除了它可能与巴贝尔有关.

编辑:我只是尝试安装我认为是缺少的包sudo npm install babel-preset-es2015 -g,但它没有解决错误.

elixir phoenix-framework

38
推荐指数
2
解决办法
5519
查看次数