【发布时间】:2017-04-23 23:17:05
【问题描述】:
我正在尝试将一个有墙壁的房间绘制成%{{x, y} => [items]} 的地图,并且我正在使用案例语句来确定我想要绘制哪种类型的墙壁。
但是,似乎尝试进行模式匹配并将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
你会怎么写?
【问题讨论】:
标签: pattern-matching elixir case-statement