我是elixir的新手,很難更新變量。需要一些幫助。我有兩個地圖如何在elixir中更新函數內部的布爾變量
firstMsg = %{msg: "Hello", vt: %{"p1" => 1, "p2" => 1, "p3" => 1}, from: "p3"}
state = %{ :name => "p2",
vector: %{"p1" => 0, "p2" => 0, "p3" => 0},
participants: ["p1","p3","p2"]
}
我傳遞這兩張地圖的功能,它應該返回我真或假,這取決於一些條件。
defmodule Testfunc do
def keep_in_pending(firstMsg, state) do
if (firstMsg.vt[firstMsg.from] == state.vector[firstMsg.from] + 1) do
#IO.puts("Origin proc clock is 1 step ahead from rcvd process Origin clk")
checking = false #initially set this to false
for n <- state.participants do
if n != firstMsg.from do #filter the origin processes
IO.puts("#{n}: #{inspect firstMsg.vt[n]} <= #{n}: #{inspect state.vector[n]} ")
checking = cond do
(firstMsg.vt[n] <= state.vector[n]) -> false
(firstMsg.vt[n] > state.vector[n]) -> true
end
end
end
end
checking
end
end
out = Testfunc.keep_in_pending(firstMsg, state)
IO.puts("#{inspect out}")
它總是給我虛假的(我最初分配給它的值),並沒有更新。我認爲變量的範圍僅限於內部「如果」。任何人都可以給我建議如何重新安排這段代碼,以便它返回適當的更新布爾值?
所以在這種情況下,它應該返回true,因爲firstMsg.vt [「p1」]> state.vector [「p1」]。
但它總是讓我在任何情況下都是虛假的。 –
奇怪的是,我得到'true',使用你提供的所有信息。 –