首页 >  资讯 >  详情

Vim9 和Vim脚本的差异(Vim9函数和变量)

2023-04-27 19:08:47来源:哔哩哔哩

用 def 定义的函数是编译的。执行速度快很多倍,经常10到100倍。

def函数总会在错误时自动abort。


(资料图)

将来会增加类。取代“dict函数”机制。如今呢,需要显式地传递字典。(暂时字典当对象用,vim9的ad.func其实是ad[func],ad.item其实是ad[item])

函数必须指定 参数类型和返回类型。 “any”类型可以被使用,然后类型检查将在运行时完成,就像以前的老式函数一样。There is no "a:" dictionary or "a:000" list。(旧Vim脚本的函数里,需要a:访问函数内变量,a:000表示整个函数的实参列表)

list类型,例如,一个数字列表(有点像C++里的容器模板)

当函数参数是可选的(它有一个缺省值)时传递 `v:none`,导致它使用缺省值

参数“_”(下划线)可用于忽略该参数。

函数和变量默认是script-local 的

在 Vim9 脚本中,该函数是脚本的script-local 函数。就像遗留脚本使用 前缀“s:”描述的。要定义全局函数或变量,“g:”前缀必须使用

脚本里要被别人导入和在自动载入脚本定义的函数,需要使用"export",才能被别处使用。

局部变量需用 `:var` 定义。局部常量需用 `:final` 或 `:const` 定义。我们把两者都称为 "变量"。

变量可以局部于脚本、函数或代码块

变量只在定义所在的块和嵌套块中可见。块定义结束后,变量不再可访问

变量必须在使用之前进行声明:

简单值有更简短和更快的方法:声明的同时初始化。

Vim9 脚本中不能用 `:let`。已有的变量可直接赋值,不需要任何命令。

全局变量必须带上 "g:" 前缀。

全局函数必须带上 "g:" 前缀

使用 :const可以同时将变量和其value设置为不可修改,适用于希望确保不会被修改的复合结构。

使用:final可以将变量设置为不可修改,但是可以更改其value。

const 限制只适用于value本身,而不限制其value引用的value。

可以使用 myList->add(123) 来调用 myList 列表对象的 add 方法,而不需要使用 eval("myList->add(123)")。这种用法可以提高代码的可读性和简洁性。但需要注意,此方法只能在方法名开头是标识符或不能被解释为 Ex 命令时使用。

Lambda表达式  使用=> 而不是 ->

lambda 表达式的参数部分与箭头符号 "=>" 之间不允许换行,以便 Vim 可以区分括号中的表达式和 lambda 表达式。实际例子:

可变参数:使用 "..._",它会让函数接受可变参数。例如:

此外,匿名函数可以包含 {} 包围的多个语句

关键词:

[ 相关文章 ]