欢迎光临散文网 会员登陆 & 注册

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

2023-04-27 18:53 作者:北壹啊  | 我要投稿


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

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

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

比如这里ad.func是函数(func这个key的value),ad.item是数据成员(item这个key的value)
  • 函数必须指定 参数类型和返回类型。 “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表达式写法

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

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

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

    lambda表达式,使用花括号包围多个语句。



    Vim9 和Vim脚本的差异(Vim9函数和变量)的评论 (共 条)

    分享到微博请遵守国家法律