文档 / 语言手册 / 基础类型
Edit

基础类型

ReScript 带有我们熟悉的基础类型,比如 stringintfloat 等。

字符串

ReScript 字符串使用双引号进行分隔(单引号保留给下面的字符类型)。

ReScriptJS Output
let greeting = "Hello world!"
let multilineGreeting = "Hello
 world!"

要连接两个字符串,使用 ++ 运算符:

ReScriptJS Output
let greetings = "Hello " ++ "world!"

字符串插值

有一个特殊的字符串语法,它允许:

  • 多行字符串

  • 没有特殊的字符转义

  • 插值

  • 适当的 unicode 处理

ReScriptJS Output
let name = "Joe"

let greeting = `Hello
World
👋
${name}
`

这就像 JavaScript 的反引号字符串插值,只是不需要转义特殊字符。

对于插值,如果绑定不是字符串(比如上述例子中的 name),你必须将其转换成字符串。如果想让插值隐式地将绑定转换为字符串,可以在前面加一个 j

ReScriptJS Output
let age = 10
let message = j`Today I am $age years old.`

用法

API文档中查看熟悉的 Js.String API。由于 ReScript 字符串映射到 JavaScript 字符串,你可以混用和匹配两个标准库中的字符串操作。

技巧和诀窍

你现在有了一个很好的类型系统了!在无类型语言中,你经常需要重载字符串的意义,比如,用作:

  • 唯一的 id:var BLUE_COLOR = "blue"

  • 数据结构的标识符:var BLUE = "blue" var RED = "red" var colors = [BLUE, RED]

  • 对象的字段名:person["age"] = 24

  • 枚举值:if (audio.canPlayType() === 'probably') {...} (ಠ_ಠ)

  • 以及在习惯了 ReScript 的替代方案后,你很快就能意识到的其他疯狂用法

你对可怜的字符串类型的意义重载的越多,类型系统(或团队成员)能够帮助你的程度就越低!ReScript 提供了简洁、快速和可维护的类型和数据结构,以替代上述使用情况(例如,后面的章节的变体)。

字符

ReScript 为单字符字符串提供了一种类型:

ReScriptJS Output
let firstLetterOfAlphabet = 'a'

注意:Char 不支持 Unicode 或 UTF-8,因此不推荐使用。

将一个字符串转换为一个字符,使用 String.get("a", 0)。将字符转换为字符串,使用 String.make(1, 'a')

正则表达式

ReScript 正则表达式可以干净地编译成对应的 JavaScript:

ReScriptJS Output
let r = %re("/b/g")

像上面这样的正则表达式的类型是 Js.Re.tJs.Re 模块包含你在 JS 中见到过的正则表达式辅助函数。

布尔类型

ReScript 布尔值具有 bool 类型,可以是 truefalse。常见的操作:

  • &&:逻辑与

  • ||:逻辑或

  • !:逻辑非

  • <=>=<>

  • ==:结构相等,深入比较数据结构:(1, 2) == (1, 2)true。很方便,但要谨慎使用

  • ===:引用相等,浅层比较数据结构。(1, 2) === (1, 2)falselet myTuple = (1, 2); myTuple === myTupletrue

  • !=:结构不相等

  • !==:引用不相等

ReScript 的 true/false 编译为 JavaScript 的 true/false

整数

32 位整数,必要时进行截断。我们提供对它们的常用操作:+-*/ 等等。参见 Js.Int 的辅助函数。

当你绑定 JavaScript 数字时要小心!由于 ReScript 整数范围比 JavaScript 数字小得多,在处理大数字时,数据可能会丢失。在这种情况下,将数字绑定为 float 会更安全。当绑定到 JavaScript 日期和它们的新纪元时间(epoch time)时,要特别注意这一点。

为了提高可读性,你可以把下划线放在数字的中间,如 1_000_000。注意,下划线可以放在数字的任何地方,不只是每隔三位数字放一个。

浮点数

浮点数需要其他运算符:+.-.*./.,等等。如 0.5 +. 0.6。参见 Js.Float 的辅助函数。

和整数一样,你可以在字面值中使用下划线以提高可读性。

Unit

unit 类型只有一个单一的值,()。它可以编译为 JavaScript 的 undefined。它是一个哑(dummy)类型,在不同的地方作为占位符使用。除非你看到它,否则你不会需要它。