我试图将一个新元素添加到列表中,如下所示:
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,我如何循环列表?
我想在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它的时候.为什么?
我有一个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中另一个函数的参数?例如,将foo传递给bar,以便bar可以调用foo.调用函数和接收它的函数的语法是什么?
Erlang(以及定义为Elixir)的一个特性是你可以进行热代码交换.但是,对于Docker来说,这似乎很奇怪,你需要停止你的实例并用新图像重新启动新实例.这基本上似乎是每个人都做的.
话虽如此,我也知道可以使用一个隐藏节点通过网络将更新分发给所有其他节点.当然,就像这样听起来像是在寻找麻烦,但......
我的问题如下:有没有人尝试并成功地为Erlang/Elixir设置基于Docker的基础设施,允许热代码交换?如果是这样,做什么,不该做什么和注意事项是什么?
我正在尝试一个square和一个cube功能.为什么square在cube爆炸时工作?
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) 我想写这样的代码:
def boundary do
:crypto.rand_bytes(8)
|> Base.encode16
|> &("--------FormDataBoundary" <> &1)
end
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
目前正试图了解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
在最新版本的Elixir中,Access不再作为协议实现,而是作为一种行为实现.从我收集的内容来看,这种变化是出于开发模式中的性能考虑.
现在,看一下实现,我想知道这是如何在内部工作的,以及为什么选择这个实现.正如我们在这里看到的,Access通过底层映射的"__struct__"键调度到struct的模块.AFAICS,这大致类似于OOP风格的多态.关于这个的一些问题:
我正在尝试使用elixir和phoenix构建一个流浪服务器,但是在安装了所有需求和依赖项之后,并且在运行时mix phoenix.server我收到以下错误:
错误:编译'web/static/js/app.js'失败.无法找到相对于目录"web/static/js"的预设"es2015";
我不确定这里的'预设'的背景,我希望一个更有经验的凤凰用户会知道它的内容.
一些粗略的谷歌给了我什么,除了它可能与巴贝尔有关.
编辑:我只是尝试安装我认为是缺少的包sudo npm install babel-preset-es2015 -g,但它没有解决错误.