Vim9 和Vim腳本的差異(Vim9函數(shù)和變量)

用?def?定義的函數(shù)是編譯的。執(zhí)行速度快很多倍,經(jīng)常10到100倍。
def函數(shù)總會在錯誤時自動abort。
將來會增加類。取代“dict函數(shù)”機(jī)制。
如今呢,需要顯式地傳遞字典。(暫時字典當(dāng)對象用,vim9的ad.func其實(shí)是ad[func],ad.item其實(shí)是ad[item])

函數(shù)必須指定 參數(shù)類型和返回類型。 “any”類型可以被使用,然后類型檢查將在運(yùn)行時完成,就像以前的老式函數(shù)一樣。There is no "a:" dictionary or "a:000" list。(舊Vim腳本的函數(shù)里,需要a:訪問函數(shù)內(nèi)變量,a:000表示整個函數(shù)的實(shí)參列表)
list類型,例如,一個數(shù)字列表(有點(diǎn)像C++里的容器模板)

當(dāng)函數(shù)參數(shù)是可選的(它有一個缺省值)時傳遞 `v:none`,導(dǎo)致它使用缺省值

參數(shù)“_”(下劃線)可用于忽略該參數(shù)。
函數(shù)和變量默認(rèn)是script-local 的
在 Vim9 腳本中,該函數(shù)是腳本的script-local?函數(shù)。就像遺留腳本使用 前綴“s:”描述的。要定義全局函數(shù)或變量,“g:”前綴必須使用。
腳本里要被別人導(dǎo)入和在自動載入腳本定義的函數(shù),需要使用"export",才能被別處使用。

局部變量需用 `:var` 定義。局部常量需用 `:final` 或 `:const` 定義。我們把兩者都稱為 "變量"。
變量可以局部于腳本、函數(shù)或代碼塊

變量只在定義所在的塊和嵌套塊中可見。塊定義結(jié)束后,變量不再可訪問

變量必須在使用之前進(jìn)行聲明:

簡單值有更簡短和更快的方法:聲明的同時初始化。

Vim9 腳本中不能用 `:let`。已有的變量可直接賦值,不需要任何命令。
全局變量必須帶上 "g:" 前綴。

全局函數(shù)必須帶上 "g:" 前綴

使用?
:const
?可以同時將變量和其value設(shè)置為不可修改,適用于希望確保不會被修改的復(fù)合結(jié)構(gòu)。

使用?
:final
?可以將變量設(shè)置為不可修改,但是可以更改其value。

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

可以使用 myList->add(123) 來調(diào)用 myList 列表對象的 add 方法,而不需要使用 eval("myList->add(123)")。這種用法可以提高代碼的可讀性和簡潔性。但需要注意,此方法只能在方法名開頭是標(biāo)識符或不能被解釋為 Ex 命令時使用。

Lambda表達(dá)式??使用?=>?而不是 ->

?????????lambda 表達(dá)式的參數(shù)部分與箭頭符號 "=>" 之間不允許換行,以便 Vim 可以區(qū)分括號中的表達(dá)式和 lambda 表達(dá)式。實(shí)際例子:

可變參數(shù):使用 "..._",它會讓函數(shù)接受可變參數(shù)。例如:

此外,匿名函數(shù)可以包含 {} 包圍的多個語句
