5 开始把结构写成程序吧!

昨天我们使用这两个 struct 来代表整个游戏的状态,那我们今天就实际的来定义他们

在开始之前

在开始之前,我来快速讲一下 struct 是什麽:
在开始讲 struct 之前,我来快速讲一下 map 是什麽XD

map

elixir 的 map 长这样 %{"key" => "value"}
用法跟 ruby 的 hash 几乎一样,只差前面有%

如果前面的 key 是 atom 的话 %{:key => "value"}
则可以缩写成 %{key: "value"}
常常这样子用 apple = %{size: "large", color: "green", prize: 99}

struct

struct 的话是被定义在 module 底下的特殊 map ,
我们可以帮他设定固定的 key 与 预设 value。

假如我们帮 Apple module 定义一个 struct :

defmodule Apple do
  defstruct size: "normal", color: "red", prize: 5
end

在我们呼叫 %Apple{} 的时候,就会得到 %Apple{size: "normal", color: "red", prize: 5}

从 Game module 开始

我们开始把这些结构写一写吧

%Game{
  rounds: [%Round{...}]
  host_hand: [],
  guest_hand: [],
  round: 1,
  winner: nil
}

%Round{
  host_desk: [], 
  guest_desk: [], 
  winner: nil
}

我们先新增一个档案叫 game.ex 来装这些东西,暂时先都写在里面就好,之後再搬。

首先定义 Game module 与 Round module,

# game.ex 档案
defmodule Game do
end

defmodule Round do
end

再帮他们定义昨天设计好的 struct

# game.ex 档案
defmodule Game do
  defstruct rounds: [], host_hand: [], guest_hand: [], round: 1, winner: nil
end

defmodule Round do
  defstruct host_desk: [], guest_desk: [], winner: nil
end

执行看看

完成之後打开我们可以在 iex 打开 game.ex 看看
(iex 是 elixir 附赠的互动模式)

$ iex game.ex
Erlang/OTP 24 [erts-12.0.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]

Interactive Elixir (1.12.2) - press Ctrl+C to exit (type h() ENTER for help)

iex(1)> %Game{}
%Game{guest_hand: [], host_hand: [], round: 1, rounds: [], winner: nil}
iex(2)> %Round{}
%Round{guest_desk: [], host_desk: [], winner: nil}
iex(3)>

在我们打出 %Game{} 他就回传给我们整包预设的状态了
也可以直接指定里面的内容给他

iex(3)> %Game{guest_hand: ["黑魔导", "神圣彗星反射力量"]}
%Game{
  guest_hand: ["黑魔导", "神圣彗星反射力量"],
  host_hand: [],
  round: 1,
  rounds: [],
  winner: nil
}

明天我们就可以开始写游戏本身了

什麽!你说你没有 iex ,因为你还没装 elixir

elixir 官网的安装页面

我推荐使用 asdf 这个多语言版本管理工具 来安装 elixir 与 erlang (elixir 需要 erlang)
在这篇文章的当下 elixir 是 1.12.3 erlang 是 24.0.6

安装有问题可以留言,我看看能不能帮上忙,有时候装环境真的很难搞。


<<:  [区块链&DAPP介绍 Day11] Solidity 教学 - units and globally available variables-2

>>:  Day 4 仓库 Repository

使用 python ols 预测值

范例: # -*- coding: utf-8 -*- import pandas as pd im...

鬼故事 - 不是,你偷这些干嘛

鬼故事 - 不是,你偷这些干嘛 Credit: System32Comics 灵感来源:UCCU H...

从零开始的8-bit迷宫探险【Level 20】搜集水晶可以召唤神龙吗?

不知道跑了多久,可能有一世纪的感觉,山姆终於累得停了下来。 上帝关起了一道门,总会为你开启另一扇窗...

[Day 10] - Spring Boot 实作登入验证(四)(JWT登入验证)

今天就来完成登入验证的部分! 昨天已经完成发送帐号密码到api,验证ok即发送一笔JWT给clien...

Day14 Number Guessing

今天要利用之前学到的东西写一个猜数字游戏,此猜数字游戏要符合以下条件: 1 猜数字范围介於0-99间...