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)))
// ]