Files
Fig-TreeWalker/docs/zh_CN/04-数据类型.md

2.5 KiB
Raw Blame History

数据类型

类型系统

Fig 语言是动态类型语言,运行时进行类型检查。

基本类型

Null 类型

表示空值,只有一个值 null

var a = null;

Int 类型

64位有符号整数。

var x = 42;
var y = -100;

Double 类型

双精度浮点数。

var pi = 3.14;
var speed = 2.998e8;

String 类型

字符串。

var s1 = "Hello";

Bool 类型

布尔值,truefalse

var yes = true;
var no = false;

复合类型

List 类型

有序集合。

var list = [1, 2, 3];
var mixed = [1, "text", true];

可以通过 length() 方法获取长度返回Int 通过 get() 方法获取指定下标不存在的下标返回null

Map 类型

键值对集合。

var map = {"key": "value", "num": 42};

通过 get() 方法获取指定下标,不存在的下标返回 null

Function 类型

函数。

var f = func(x, y) { return x + y; };

自定义类型

结构体定义

struct Person {
    name: String;
    age: Int;
}

默认字段为私有,如需声明为外部可见的字段,使用 public关键字 如

struct Person {
    public name: String;
    public age: Int;

    public func greeting()
    {
        io.println("hello!");
    }
}

创建实例

使用 new 关键字:

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 运算符:

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() 函数(获取内部类型)

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 模块:

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 语法

try
{
    // 可能抛出异常的代码
}
catch(e: ErrorType)
{
    // 处理特定类型的错误
}
catch(e: AnotherError)
{
    // 处理另一种错误
}