156 lines
2.5 KiB
Markdown
156 lines
2.5 KiB
Markdown
# 数据类型
|
||
|
||
## 类型系统
|
||
|
||
Fig 语言是动态类型语言,运行时进行类型检查。
|
||
|
||
## 基本类型
|
||
|
||
### Null 类型
|
||
表示空值,只有一个值 `null`。
|
||
```dart
|
||
var a = null;
|
||
```
|
||
|
||
### Int 类型
|
||
64位有符号整数。
|
||
```go
|
||
var x = 42;
|
||
var y = -100;
|
||
```
|
||
|
||
### Double 类型
|
||
双精度浮点数。
|
||
```go
|
||
var pi = 3.14;
|
||
var speed = 2.998e8;
|
||
```
|
||
|
||
### String 类型
|
||
字符串。
|
||
```go
|
||
var s1 = "Hello";
|
||
```
|
||
|
||
### Bool 类型
|
||
布尔值,`true` 或 `false`。
|
||
```go
|
||
var yes = true;
|
||
var no = false;
|
||
```
|
||
|
||
## 复合类型
|
||
|
||
### List 类型
|
||
有序集合。
|
||
```go
|
||
var list = [1, 2, 3];
|
||
var mixed = [1, "text", true];
|
||
```
|
||
可以通过 **length()** 方法获取长度,返回Int
|
||
通过 **get()** 方法获取指定下标,不存在的下标返回null
|
||
|
||
### Map 类型
|
||
键值对集合。
|
||
```go
|
||
var map = {"key": "value", "num": 42};
|
||
```
|
||
|
||
通过 **get()** 方法获取指定下标,不存在的下标返回 `null`
|
||
|
||
### Function 类型
|
||
函数。
|
||
```go
|
||
var f = func(x, y) { return x + y; };
|
||
```
|
||
|
||
## 自定义类型
|
||
|
||
### 结构体定义
|
||
```rust
|
||
struct Person {
|
||
name: String;
|
||
age: Int;
|
||
}
|
||
```
|
||
|
||
默认字段为私有,如需声明为外部可见的字段,使用 public关键字
|
||
如
|
||
```go
|
||
struct Person {
|
||
public name: String;
|
||
public age: Int;
|
||
|
||
public func greeting()
|
||
{
|
||
io.println("hello!");
|
||
}
|
||
}
|
||
```
|
||
|
||
### 创建实例
|
||
使用 `new` 关键字:
|
||
```go
|
||
var p = new Person {name: "Alice", age: 20};
|
||
```
|
||
|
||
支持三种初始化方式:
|
||
1. 命名参数:`new Person {name: "Alice", age: 20}`
|
||
2. 位置参数:`new Person {"Alice", 20}`
|
||
3. 简写方式:`new Person {name, age}`(使用同名变量)
|
||
|
||
## 类型操作
|
||
|
||
### 类型检查
|
||
使用 `is` 运算符:
|
||
```go
|
||
var x = "hello";
|
||
io.println(x is String); // true
|
||
|
||
var p = new Person {name: "Alice", age: 20};
|
||
io.println(p is Person); // true
|
||
```
|
||
|
||
### 获取类型
|
||
使用 `value.type()` 函数(获取内部类型):
|
||
```go
|
||
import std.value;
|
||
|
||
var num = 42;
|
||
var str = "hello";
|
||
var lst = [1, 2, 3];
|
||
|
||
io.println(value.type(num)); // 获取 num 的类型
|
||
io.println(value.type(str)); // 获取 str 的类型
|
||
io.println(value.type(lst)); // 获取 lst 的类型
|
||
```
|
||
|
||
## 类型转换
|
||
|
||
### 转换函数
|
||
通过 `std.value` 模块:
|
||
```go
|
||
import std.value;
|
||
|
||
var str = value.string_from(42); // "42"
|
||
var num = value.int_parse("123"); // 123
|
||
var dbl = value.double_parse("3.14"); // 3.14
|
||
```
|
||
|
||
## 错误处理
|
||
|
||
### try-catch 语法
|
||
```rust
|
||
try
|
||
{
|
||
// 可能抛出异常的代码
|
||
}
|
||
catch(e: ErrorType)
|
||
{
|
||
// 处理特定类型的错误
|
||
}
|
||
catch(e: AnotherError)
|
||
{
|
||
// 处理另一种错误
|
||
}
|
||
``` |