0
我想用牆壁繪製一個房間到%{{x, y} => [items]}
的地圖,我正在使用case語句來找出我想繪製的牆的類型。Elixir案例陳述和模式匹配
然而,它試圖做模式匹配,並將pos
分配給左側的值。 (投擲illegal pattern
編譯錯誤)
我知道我可以防止轉讓與^
,但如何我需要做(from_y+sizey)
?
def place_room({from_x, from_y}, {size_x, size_y}, original_map) do
Enum.reduce from_x..(from_x + size_x-1), original_map, fn x, map ->
Enum.reduce from_y..(from_y + size_y-1), map, fn y, map ->
pos = {x, y}
case pos do
{from_x, from_y} ->
place(map, pos, :wall, %{type: :room_wall_tl})
{from_x, (from_y+size_y)} ->
place(map, pos, :wall, %{type: :room_wall_tr})
{from_x, (from_y+size_y)} ->
place(map, pos, :wall, %{type: :room_wall_bl})
{(from_x+size_x), (from_y+size_y)} ->
place(map, pos, :wall, %{type: :room_wall_br})
{_, _} ->
place(map, pos, :floor, %{type: :room_floor})
weird ->
IO.inspect weird
end
end
end
end
你會怎樣寫這個?
很高興知道,謝謝! – hakunin
我還添加了一個基於cond的解決方案。如果我正在編寫類似於你的問題的代碼,我會使用它。 – Dogbert
謝謝,這使它看起來好多了! – hakunin