在 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 个函数,它们大多与操作一个保存高分的对象有关。
创建一个函数create_score_board,它返回一个字典,用作高分榜。
这个对象的键是玩家名字,值是他们的分数。
为了方便测试,你需要在对象中直接加入一条记录。
这条初始记录应当由玩家名字"The Best Ever"和分数1_000_000组成。
create_score_board()
// returns an object with one initial entry
要向高分榜添加玩家,请定义函数add_player。
它接受 3 个参数:
该函数返回一个字典,其中已加入新的玩家和分数。
如果玩家违反街机厅的规则,就会被手动从高分榜上移除。
定义remove_player,它接受 2 个参数:
该函数应返回移除了该玩家之后的字典。
如果玩家本来就不在榜上,那么榜就不应该发生任何变化,应当原样返回。
如果玩家在街机厅里又完成了一局游戏,就会有一定数量的分数加到榜上原有的分数上。
实现update_score,它接受 3 个参数:
该函数应返回一个字典,其中包含更新后的分数。
如果玩家本来就不在榜上,那么榜就不应该发生任何变化,应当原样返回。
街机厅在每周一维护一份单独的高分榜。 一天结束时,那份榜上的每位玩家都会获得 100 点额外分数。
实现函数apply_monday_bonus,它接受一个高分榜。
该函数返回一个字典,其中为榜上的每位玩家都加上了奖励分。