Gleam 中的常量是一种给值命名的方式。使用const关键字来定义它们。
pub const pi: Float = 3.14159
pub fn circle_area(radius: Float) -> Float {
radius *. radius *. pi
}
用pub关键字定义时,模块常量可以被其他模块访问;否则只能在定义它们的模块内部访问。
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 是一名气候记者,她想写一篇关于不同城市天气的文章。她手上有不同城市的天气数据,想根据气温给这些城市排名,但有些气温是华氏度,有些是摄氏度。她需要你帮忙把气温换算成同一单位,再给它们排名。
定义fahrenheit_to_celsius函数,它接收一个华氏温度作为实参,返回对应的摄氏温度。
要把华氏度换算成摄氏度,先用华氏温度减去 32,再把结果除以 1.8。
fahrenheit_to_celsius(72.5)
// -> 22.5
定义compare_temperature函数,它接收两个温度,返回一个Order值,表示第一个温度是小于、等于还是大于第二个温度。
compare_temperature(Celsius(30.5), Fahrenheit(82.1))
// -> Gt
定义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)))
// ]