0
壁のある部屋を%{{x, y} => [items]}
のマップにペイントしようとしています。私は描画する壁のタイプを特定するためにcaseステートメントを使用しています。エリクサーケースステートメントとパターンマッチング
ただし、パターンマッチングを試み、左にある値に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