轨道
/
Gleam
Gleam
/
练习
/
高分榜
高分榜

高分榜

学习练习

简介

类型别名

类型别名

在 Gleam 中,类型别名可以为已有的类型取一个方便的名字,否则这个类型写起来会很繁琐。

pub type Headers =
  List(#(String, String))

pub fn html_headers() -> Headers {
  [
    #("content-type", "text/html"),
    #("x-frame-options", "DENY"),
  ]
}

用pub type书写时,该别名可以在定义它的模块之外使用。如果省略pub,这个别名就是私有的,无法在其他模块中引用。

字典

Gleam 中的字典是用于以键值对存储信息的数据结构。在其他语言中,这类结构也被称为关联数组、哈希或字典。

字典中的键和值可以是任意类型,而且在访问或返回时,它们不保证条目的顺序。

使用字典

字典通过gleam/dict模块中的函数来创建和操作。

// Create an empty dict
let dict1 = dict.new()

// Create a dict with some values
let dict2 = dict.from_list([
  #("name", "Gleam"),
  #("colour", "Pink"),
])

// Add a value to a dict
let dict3 = dict.insert(dict2, "website", "https://gleam.run")

// Get a value from a dict
let name = dict.get(dict3, "name")
// -> Ok("Gleam")

说明

在这个练习中,你将实现一种方式来记录你当地街机厅里最受欢迎游戏的高分。

你需要实现 5 个函数,它们大多与操作一个保存高分的对象有关。

1. 创建新的高分榜

创建一个函数create_score_board,它返回一个字典,用作高分榜。 这个对象的键是玩家名字,值是他们的分数。 为了方便测试,你需要在对象中直接加入一条记录。 这条初始记录应当由玩家名字"The Best Ever"和分数1_000_000组成。

create_score_board()
// returns an object with one initial entry

2. 向高分榜添加玩家

要向高分榜添加玩家,请定义函数add_player。 它接受 3 个参数:

  • 第一个参数是已有的高分榜字典。
  • 第二个参数是玩家名字,类型为字符串。
  • 第三个参数是分数,类型为整数。

该函数返回一个字典,其中已加入新的玩家和分数。

3. 从高分榜移除玩家

如果玩家违反街机厅的规则,就会被手动从高分榜上移除。 定义remove_player,它接受 2 个参数:

  • 第一个参数是已有的高分榜字典。
  • 第二个参数是玩家名字,类型为字符串。

该函数应返回移除了该玩家之后的字典。

如果玩家本来就不在榜上,那么榜就不应该发生任何变化,应当原样返回。

4. 提高玩家的分数

如果玩家在街机厅里又完成了一局游戏,就会有一定数量的分数加到榜上原有的分数上。 实现update_score,它接受 3 个参数:

  • 第一个参数是已有的高分榜字典。
  • 第二个参数是要提高分数的玩家名字。
  • 第三个参数是你希望加到已存高分上的分数。

该函数应返回一个字典,其中包含更新后的分数。

如果玩家本来就不在榜上,那么榜就不应该发生任何变化,应当原样返回。

5. 应用周一奖励分

街机厅在每周一维护一份单独的高分榜。 一天结束时,那份榜上的每位玩家都会获得 100 点额外分数。

实现函数apply_monday_bonus,它接受一个高分榜。 该函数返回一个字典,其中为榜上的每位玩家都加上了奖励分。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Gleam Exercism

准备好开始 高分榜 了吗?

注册 Exercism,借助 33 个概念122 个练习 和真人导师指导,学习并掌握 Gleam,全部免费。