轨道
/
Gleam
Gleam
/
练习
/
天气排行
天气排行

天气排行

学习练习

简介

常量

Gleam 中的常量是一种给值命名的方式。使用const关键字来定义它们。

pub const pi: Float = 3.14159

pub fn circle_area(radius: Float) -> Float {
  radius *. radius *. pi
}

用pub关键字定义时,模块常量可以被其他模块访问;否则只能在定义它们的模块内部访问。

Order 类型

Gleam 标准库中的gleam/order模块包含Order类型,用来比较值。

Order的定义如下:

pub type Order {
  Gt
  Eq
  Lt
}

这个类型有三个变体,每个都用来表示一个值与另一个值之间的关系:

  • Gt:该值_大于_另一个值。
  • Eq:该值_等于_另一个值。
  • Lt:该值_小于_另一个值。

如果一个数据类型可以按大小比较,模块通常会定义一个返回Order值的compare函数。例如,gleam/float和gleam/int分别定义了用于浮点数和整数的compare函数。

int.compare(1, 2)
// -> Lt

int.compare(2, 2)
// -> Eq

float.compare(1.0, 2.0)
// -> Lt

像list.sort这样的排序函数通常会接收一个返回Order值的函数,让调用方自行决定数组该如何排序。

list.sort([3, 7, 3, 1], by: int.compare)
// -> [1, 3, 3, 7]

说明

Tori 是一名气候记者,她想写一篇关于不同城市天气的文章。她手上有不同城市的天气数据,想根据气温给这些城市排名,但有些气温是华氏度,有些是摄氏度。她需要你帮忙把气温换算成同一单位,再给它们排名。

1. 将华氏度转换为摄氏度

定义fahrenheit_to_celsius函数,它接收一个华氏温度作为实参,返回对应的摄氏温度。

要把华氏度换算成摄氏度,先用华氏温度减去 32,再把结果除以 1.8。

fahrenheit_to_celsius(72.5)
// -> 22.5

2. 比较两个温度

定义compare_temperature函数,它接收两个温度,返回一个Order值,表示第一个温度是小于、等于还是大于第二个温度。

compare_temperature(Celsius(30.5), Fahrenheit(82.1))
// -> Gt

3. 按气温给城市排序

定义sort_cities_by_temperature函数,它接收一个城市数组,并按照从最冷到最暖的顺序返回这些城市。

sort_cities_by_temperature([
  City(name: "London", temperature: Celsius(30.5)),
  City(name: "Paris", temperature: Fahrenheit(82.1))
])
// -> [
//   City(name: "Paris", temperature: Fahrenheit(82.1)),
//   City(name: "London", temperature: Celsius(30.5)))
// ]
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Gleam Exercism

准备好开始 天气排行 了吗?

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