我是Elixir的新手,我正在尝试使用STDOUT打印一些东西IO.puts.IO.puts需要chardata.我查看了Elixir文档并没有看到将元组转换为位串的方法.我知道必须有办法做到这一点,但我没有找到任何BIF这样做.
所以我想把它转换成{"foo", "bar", "baz"}:"foobarbaz".
我正在学习Elixir和Erlang,所以这对我来说都是新手.
提前致谢!
我正在研究Elixir,当我从模块导入函数时使用only或except运算符时,我需要指定一个arity数.为什么?
例如
import :math, only: [sqrt: 1]
Run Code Online (Sandbox Code Playgroud)
要么
import :math, except: [sin: 1, cos: 1]
Run Code Online (Sandbox Code Playgroud) 我有一个带有文件字段的HTML表单,用于将文件上传到/file我的Phoenix应用程序中的路由.
我从命令行模仿这种行为,curl -v -F "file=@MyTestFile" http://localhost:4000/file/以便更快地进行测试.
当我使用一个大文件(转折点似乎约为7.7MB)时,我从Plug获得以下异常:
18:40:38.897 [错误]错误在过程<0.420.0>与退出值:{[{原因,#{ ' 例外 '=>真,' 结构 '=>' Elixir.Plug.Parsers.RequestTooLargeError',消息=>零}},{MFA,{ 'Elixir.Plug.Adapters.Cowboy.Handler',INIT,3}},{堆栈跟踪,[{ 'Elixir.Plug.Parsers',减少,如图6所示,[{文件," LIB /插......
是否有解决方法允许上传更大的文件?
:length在Plug中似乎有一个选项关键字,但我怎么能从凤凰城设置它?这个特殊价值8_000_000被选中的原因是什么?
我想为我的网站运行一个带有凤凰后端的angularJS前端.我希望我的根路由将用户引导到包含我的角度客户端的静态目录中的预构建页面,然后使用phoenix运行API.过去我通过路由匹配在轨道上使用ruby来完成此操作:
get '/', to: redirect('/foobar.html')
Run Code Online (Sandbox Code Playgroud)
有没有办法和凤凰做类似的事情?
过去几周我一直在修补Elixir.我刚刚在Erlang中遇到了这个简洁的组合算法,我尝试在Elixir中重写但是卡住了.
Erlang版本:
comb(0,_) ->
[[]];
comb(_,[]) ->
[];
comb(N,[H|T]) ->
[[H|L] || L <- comb(N-1,T)]++comb(N,T).
Run Code Online (Sandbox Code Playgroud)
Elixir版本我提出了这个,但它不正确:
def combination(0, _), do: [[]]
def combination(_, []), do: []
def combination(n, [x|xs]) do
for y <- combination(n - 1, xs), do: [x|y] ++ combination(n, xs)
end
Run Code Online (Sandbox Code Playgroud)
示例用法,结果不正确:
iex> combination(2, [1,2,3])
[[1, 2, [3], [2, 3]]]
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么的指示?
谢谢!
肖恩
我想用一名is_range()后卫.例如:
def foo(bar) when is_range(bar) do
# stuff
end
Run Code Online (Sandbox Code Playgroud)
但is_range不存在?我正在使用Elixir 1.0.5
我试过了
def foo(bar) when Range.range?(bar) do
# stuff
end
Run Code Online (Sandbox Code Playgroud)
但这也行不通.
我该怎么办?
假设我有类似的东西:
Enum.map(list, fn(x) -> String.duplicate("a", someValue * x) end)
Run Code Online (Sandbox Code Playgroud)
但相反,我想将String.duplicate/2函数作为参数传递,以简化我的代码:
Enum.map(list, &String.duplicate/2)
Run Code Online (Sandbox Code Playgroud)
我知道你可以为arity 1功能做到这一点:
Enum.map(list, &String.downcase/1)
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有这样的订阅.
defmodule Rebirth.Subscription do
use Rebirth.Web, :model
schema "subscriptions" do
...
belongs_to :user, Rebirth.User
...
end
...
def update_user(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
|> cast_assoc(:user, required: false)
end
end
Run Code Online (Sandbox Code Playgroud)
我想将用户与订阅相关联
所以我试过了
Rebirth.Subscription.update_user(subscription, %{user_id: 1})
Run Code Online (Sandbox Code Playgroud)
要么
Rebirth.Subscription.update_user(subscription, %{user: user})
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到以下错误:
** (ArgumentError) unknown assoc `user` in `cast_assoc`
Run Code Online (Sandbox Code Playgroud)
如何更新user_id?
谢谢!
elixir的pry可以在模块中运行私有方法吗?例如:
defmodule Test do
require IEx
def foo do
IEx.pry
end
defp bar do
end
end
Run Code Online (Sandbox Code Playgroud)
此时呼叫bar不起作用.我对elixir很新,有什么我做错了或者为什么这是不可能的?
我试图了解Smalltalk中的对象/消息与Erlang中的进程/消息之间的区别。我阅读了有关该主题的以下文章。
据我了解,在Smalltalk中,所有事物都是一个对象,并且所有事物都具有相同的“对象/消息”抽象-即使数字1是只能通过消息传递才能到达的对象。是1在Erlang / Elixir中进行的过程吗?Erlang中的所有内容是否都是对消息/程序范例的响应?您可以向Erlang中的号码发送消息吗?
非常感谢。