Skip to content

Latest commit

 

History

History
78 lines (53 loc) · 2.27 KB

#009_模块导入.md

File metadata and controls

78 lines (53 loc) · 2.27 KB

1.3 模块导入

1.3.1 导入并使用模块

模块可以通过关键字 import 导入:

import os

fn main() {
    // read text from stdin
    name := os.input('Enter your name: ')
    println('Hello, $name!')
}

上面代码中,导入过后程序就可以使用 os 模块中的所有公开声明内容,比如 input 函数。可以查看 standard library 进一步了解常用模块。

默认情况下,每次调用外部函数时都必须指定模块前缀。一开始这可能看起来很冗长,但它使代码更具可读性,更容易理解——这样调用哪个模块的哪个函数总是非常清晰。这在大型的代码库中非常有用。

循环导入模块是不允许的,就像 Go 里一样。

1.3.2 选择性导入模块

你可以直接导入模块中的特定函数与类型:

import os { input }

fn main() {
    // read text from stdin
    name := input('Enter your name: ')
    println('Hello, $name!')
}

注意:这同样会将整个模块导入。并且不允许对常量如此操作——使用导入模块的常量必须带上前缀。

你可以一次性导入多个符号:

import os { input, user_os }

name := input('Enter your name: ')
println('Name: $name')
os := user_os()
println('Your OS is ${os}.')

1.3.3 以别名导入模块

任何导入的模块都可以用 as 关键字取别名。

注意:下面的例子中 mymod/sha256.v 模块并非内置,仅作例子展示,想要通过编译需要手动创建。

import crypto.sha256
import mymod.sha256 as mysha256

fn main() {
    v_hash := sha256.sum('hi'.bytes()).hex()
    my_hash := mysha256.sum('hi'.bytes()).hex()
    assert my_hash == v_hash
}

你不能给一个已经导入的函数或者类型取别名。但是你可以重新声明一个类型。

import time
import math

type MyTime = time.Time

fn (mut t MyTime) century() int {
    return int(1.0 + math.trunc(f64(t.year) * 0.009999794661191))
}

fn main() {
    mut my_time := MyTime{
        year: 2020
        month: 12
        day: 25
    }
    println(time.new_time(my_time).utc_string())
    println('Century: $my_time.century()')
}