我只是尝试使用 Elixir 运行特定格式的curl 命令。
$ curl -w "@config/curl-format.txt" -o /dev/null -s "http://wordpress.com/"
0.004, 0.017, 0.000, 0.017, 0.000, 0.029, 0.029
Run Code Online (Sandbox Code Playgroud)
直接从终端运行命令效果很好。
这就是我在 Elixir 中尝试做的事情:
args = ["-w config/curl-format.txt", "-o /dev/null", "-s", "http://wordpress.com"]
result = System.cmd("curl", args, [])
Run Code Online (Sandbox Code Playgroud)
但我得到:
{" config/curl-format.txt", 23}
Run Code Online (Sandbox Code Playgroud)
而且结果和上面不一样。
我正在尝试实现一个字典,但 Map.put 函数没有将新元素添加到地图中,而是给了我一个新地图,其中插入了最后一个 (key, value} 我也试过 Map.put_new 它没有用
def someFunction(array) do
dict = %{}
Enum.each(array, fn item ->
if (Map.has_key?(dict, item)) do
dict = %{dict | item => (dict[item] + 1)}
else
dict = Map.put(dict , item, 1)
end
end)
end
Run Code Online (Sandbox Code Playgroud) 当我尝试使用Ecto以下方法在我的数据库中插入一行时:
sla = %MyMetrics.MonthlySLA{metric_name: "x", metric_type: "y", value: 43.33, metric_date: Date.new!(2020,1,1)}
MyMetrics.Repo.insert(sla)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
17:44:26.704 [debug] QUERY ERROR db=134.8ms queue=143.8ms idle=1397.2ms
INSERT INTO `monthly_slas` (`metric_date`,`metric_name`,`metric_type`,`value`) VALUES (?,?,?,?) [~D[2020-01-01], "x", "y", #Decimal<43.33>]
** (MyXQL.Error) (1364) (ER_NO_DEFAULT_FOR_FIELD) Field 'inserted_at' doesn't have a default value
(ecto_sql 3.5.3) lib/ecto/adapters/myxql.ex:241: Ecto.Adapters.MyXQL.insert/6
(ecto 3.5.5) lib/ecto/repo/schema.ex:649: Ecto.Repo.Schema.apply/4
(ecto 3.5.5) lib/ecto/repo/schema.ex:262: anonymous fn/15 in Ecto.Repo.Schema.do_insert/4
Run Code Online (Sandbox Code Playgroud)
我的Ecto模型。
defmodule MyMetrics.MonthlySLA do
use Ecto.Schema
import Ecto.Changeset
schema "monthly_slas" do
field :metric_name, :string
field :metric_type, :string
field :metric_date, :date …Run Code Online (Sandbox Code Playgroud) 我想使用一个函数,它接受一个可枚举和一个函数,并与 Python 的 itertools.accumulate 做同样的事情。例如,
iex> accumulate([1,3,7], &Kernel.+)
[1, 4, 11]
Run Code Online (Sandbox Code Playgroud)
作为解释,它等于[1, 1+2, 1+4+7]。Elixir 的标准库中是否存在这样的函数?
我知道这是 stackoverflow 上的一个常见问题,但找不到专门针对 Elixir 的解决方案。
考虑元组列表:
[
{1, 3, "1S"},
{10, 3, "3S"},
{10, 3, "9S"},
{10, 3, "10S"},
{10, 3, "11S"},
{12, 3, "12S"},
{13, 3, "13S"}
]
Run Code Online (Sandbox Code Playgroud)
预期结果:每个元组的第一个参数中最常见的元素是 10。每个元组的第二个参数中最常见的元素是 3。
是否有执行此操作的函数,或者我必须创建自己的函数来“迭代”每个元组列表elem(list, index)?
之后如何访问第一个列表Enum.split_with()?
m = Enum.split_with([5, 4, 3, 2, 1, 0], fn x -> rem(x, 2) == 0 end)
// m = {[4, 2, 0], [5, 3, 1]}
Run Code Online (Sandbox Code Playgroud)
我只想访问列表[4,2,0]并通过另一个Enum.filter()函数
就像是
m =
Enum.split_with([5, 4, 3, 2, 1, 0], fn x -> rem(x, 2) == 0 end)
|> Enum.filter(fn -> ) //Filter only first list after split
Run Code Online (Sandbox Code Playgroud) 我正在尝试计算从 range1 到 range4 的每个范围内数字的次数。范围1是1-10,范围2是11-20,范围3是21-30,范围4是31-40。我在下面的是:
range1=0
range2=0
range3=0
range4=0
arr=[1,11,2,22,33,23]
Enum.each arr, fn(x) ->
if x >=1 and x<=10 do
range1=range1+1
end
if x>=11 and x<=20 do
range2=range2+1
end
if x>=21 and x<=30 do
range3=range3+1
end
if x>=31 and x<=40 do
range4=range4+1
end
end
IO.puts range1
IO.puts range2
IO.puts range3
IO.puts range4
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,它会说它们都是 0。为什么要这样做?
我想用 3 替换所有出现的 2。我想在不使用索引值的情况下执行此操作,因为这将是硬编码。到目前为止我所拥有的是:
list=[1,2,3,4,2,34,2]
replace_at(list, index, value)
Enum.each list, fn(x) ->
if x==2 do
replace_at(list, index, 3)
end
Enum.each list, fn(x) ->
IO.puts x
end
Run Code Online (Sandbox Code Playgroud) 在 python 中,我们可以将一个函数传递给另一个函数,如下面的示例代码。
def digits(n):
return list(map(int, str(n)))
def digit_cube(n):
return list(map(lambda x: x ** 3, digits(n)))
Run Code Online (Sandbox Code Playgroud)
可以在 elixir 中做同样的事情吗?如果是,如何?
我有一个凤凰应用程序。有时我会遇到这样的情况:
$ ps aux
===>
user1 67297 0.0 0.2 13240 1860 - S Thu07 0:03.00 /usr/home/user1/my_projects/project1/erts-10.3.5.19/bin/epmd -daemon
Run Code Online (Sandbox Code Playgroud)
然后我会试着阻止它
$ MIX_ENV=prod ./bin/project1 stop
--rpc-eval : RPC failed with reason :nodedown
Run Code Online (Sandbox Code Playgroud)
为什么它首先说它已关闭?
尽管如此,它仍然会保持不变:
$ ps aux
===>
user1 67297 0.0 0.2 13240 1860 - S Thu07 0:03.00 /usr/home/user1/my_projects/project1/erts-10.3.5.19/bin/epmd -daemon
Run Code Online (Sandbox Code Playgroud)
怎么了?
PS 通常,有 3 个左右的进程与项目有关,尽管在我的问题中只有 1 个。在这种情况下,我已经通过“kill”手动杀死了其中的 2 个。然而,这并没有解决这个问题。