V语言07管理包

v 选项 参数:

选项 意思
install 安装
remove 删除
search 搜索
update 更新,更新一个
upgrade 升级,升级所有过时的
list 列举
outdated 过时,列举需要升级的
v install ui
//从VPM搞事情
v remove [module]

发布包

v.mod.用v new mymodule或v init命令,已有.
内部为:

Module {
	name: "mymodule"
	description: "我的包."
	version: "0.0.1"
	license: "MIT"
	dependencies: []
}

最小结构:

v.mod
mymodule.v

内部为:

//mymodule.v
module mymodule

pub fn hello_world() {
	println("你好啊")
}

创建git

git init
git add .
git commit -m "INIT"

github.com上建仓库.推至远端.
https://vpm.vlang.io/new上提交.
最终模块名为:mygithubname.mymodule,并加上vlang/vlang-module标签来方便搜索.

声明类型

struct Dog {
	breed string
}

struct Cat {
	breed string
}

fn (d Dog) speak() string {
	return "woof"
}

fn (c Cat) speak() string {
	return "meow"
}

//V的接口可定义字段和方法
interface Speaker {
	breed string
	speak() string
}

dog := Dog{"Leonberger"}
cat := Cat{"Siamese"}

mut arr := []Speaker{}
arr << dog
arr << cat
for item in arr {
	println("$item.breed说: $item.speak()")
}

实现字段+方法即实现接口,不必显式声明意图,无实现关键字.
转换接口

interface Something {}

fn announce(s Something) {
	if s is Dog {
		println("$s.breed dog") // `s`自动转为狗
	} else if s is Cat {
		println("$s.breed cat")
	} else {
		println("其余")
	}
}

动态转换操作符,测试接口底层类型.接口可实现默认方法,这样构可不实现.

struct Cat {}

fn (c Cat) speak() string {
	return "meow!"
}

interface Adoptable {}

fn (a Adoptable) speak() string {
	return "哈哈!"
}//接口的

fn new_adoptable() Adoptable {
	return Cat{}
}

fn main() {
	cat := Cat{}
	assert cat.speak() == "meow!"
	a := new_adoptable()
	assert a.speak() == "哈哈!"//表层
	if a is Cat {//底层
		println(a.speak()) // meow!
	}
}

对象以接口展示,则调用接口实现.即当作基类,如转为子类,才调用子类同名函数.

上一篇:react native 接入QQ登陆(Android)


下一篇:vue常用组件通信