我想找到第一个负数之前的所有正数的总和.
我在elixir中得到以下列表.
iex(4)> steps = [0,1,2,3,-4,5,6,-1]
Run Code Online (Sandbox Code Playgroud)
我按如下方式计算此列表的总和
Enum.reduce(steps,0,fn x,acc -> acc=acc+x end)
Run Code Online (Sandbox Code Playgroud)
一旦我们达到负数,如何减少?
所以这是我的代码:
defmodule Parent do
def arun(pid) do
:ets.new(:my_table,[:named_table, :set, :public, read_concurrency: true])
:ets.give_away(:my_table, pid, [])
end
def receiver do
pid = spawn(fn -> arun(self()) end)
receive do
{'ETS-TRANSFER',_,_,_} ->
IO.puts "ets got transferred"
_ ->
IO.puts "I dont know what happened"
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试编译此运行时错误即将到来.
iex(31)> Parent.receiver
17:37:19.183 [error] Process #PID<0.204.0> raised an exception
** (ArgumentError) argument error
(stdlib) :ets.give_away(:my_table, #PID<0.204.0>, [])
parent.ex:4: Parent.arun/1
Run Code Online (Sandbox Code Playgroud)
还有人可以告诉我正确的方法来制作一个ets表并将其所有权交给其他进程吗?我正在尝试这样做:父进程将创建一个异步任务,它将创建一个ets表,然后此任务/进程将所有权返还给父进程.
所以这是我的代码:
defmodule Test do
def fun() do
Process.sleep(10000)
IO.puts "sleep over"
end
def dummy(:b) do
spawn(fun())
end
def dummy(:a) do
spawn(Test,:fun,[])
end
def dummy() do
spawn(fn -> Process.sleep(10000)
IO.puts "sleep over"
end)
IO.puts "process started"
end
end
Run Code Online (Sandbox Code Playgroud)
在运行此代码并执行各种虚函数时,我得到了这个输出:
iex(1)> c("test.exs")
[Test]
iex(2)> Test.dummy
process started
:ok
sleep over
iex(3)> Test.dummy :
** (SyntaxError) iex:3: unexpected token: ":" (column 12, codepoint U+003A)
iex(3)> Test.dummy :a
#PID<0.111.0>
iex(4)>
nil
iex(5)>
nil
sleep over
iex(6)> Test.dummy :b
sleep over
** (ArgumentError) argument error …Run Code Online (Sandbox Code Playgroud) 我在生产中有一个 AWS Lambda 函数。触发它可以导致货币交易。我想阻止通过 AWS 控制台测试此 lambda 的功能,以便具有控制台访问权限的用户不会意外触发它,以便他们可以在相应的登台 lambda 上进行测试。它以某种方式可能吗?