标签: elixir

无法使用 System.cmd 从 Elixir 中运行curl 命令

我只是尝试使用 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)

而且结果和上面不一样。

curl command system elixir

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

如何使用 Map 实现字典

我正在尝试实现一个字典,但 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)

dictionary list elixir

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

Ecto insert 不会自动填充时间戳字段

当我尝试使用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)

timestamp elixir ecto

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

是否有等效于 Python 的 itertools.accumulate 的 Elixir 函数?

我想使用一个函数,它接受一个可枚举和一个函数,并与 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 的标准库中是否存在这样的函数?

functional-programming elixir

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

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)

tuples element list frequency elixir

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

Enum.split_with 但只使用结果元组的一侧

之后如何访问第一个列表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)

elixir

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

如何在elixir的循环中增加一个值

我正在尝试计算从 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。为什么要这样做?

elixir

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

如何在elixir中替换数组中的元素

我想用 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)

elixir

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

如何将一个函数传递给 elixir 中同一模块中的另一个函数?

在 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 中做同样的事情吗?如果是,如何?

elixir

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

僵尸进程或类似的东西?

我有一个凤凰应用程序。有时我会遇到这样的情况:

$ 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 个。然而,这并没有解决这个问题。

elixir phoenix-framework

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