1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
vim9script
# Vim9 lambda expressions
# VIM_TEST_SETUP hi link vim9LambdaOperator Todo
# VIM_TEST_SETUP hi link vim9LambdaParen Todo
var Foo: func
var expr = 0
# without return type
Foo = () => expr
Foo = (_) => expr
Foo = (x) => expr
Foo = (...y) => expr
Foo = (_, ...y) => expr
Foo = (x, ...y) => expr
Foo = (x, y) => expr
Foo = (_: number) => expr
Foo = (x: number) => expr
Foo = (...y: list<number>) => expr
Foo = (_: number, ...y: list<number>) => expr
Foo = (x: number, ...y: list<number>) => expr
Foo = (x: number, y: number) => expr
# with return type
Foo = (): number => expr
Foo = (_): number => expr
Foo = (x): number => expr
Foo = (...y): number => expr
Foo = (_, ...y): number => expr
Foo = (x, ...y): number => expr
Foo = (x, y): number => expr
Foo = (_: number): number => expr
Foo = (x: number): number => expr
Foo = (...y: list<number>): number => expr
Foo = (_: number, ...y: list<number>): number => expr
Foo = (x: number, ...y: list<number>): number => expr
Foo = (x: number, y: number): number => expr
# with compound return type
Foo = (): list<number> => expr
Foo = (_): list<number> => expr
Foo = (x): list<number> => expr
Foo = (...y): list<number> => expr
Foo = (_, ...y): list<number> => expr
Foo = (x, ...y): list<number> => expr
Foo = (x, y): list<number> => expr
Foo = (_: number): list<number> => expr
Foo = (x: number): list<number> => expr
Foo = (...y: list<number>): list<number> => expr
Foo = (_: number, ...y: list<number>): list<number> => expr
Foo = (x: number, ...y: list<number>): list<number> => expr
Foo = (x: number, y: number): list<number> => expr
# Post-operator comments
Foo = () => # comment
expr
Foo = () =>
# comment
expr
Foo = () =>
# comment
expr
# Line continuations
Foo = (x: string,
\ y: number,
\ z: bool) => expr
Foo = (x: string,
\ y: number,
\ z: bool)
\ => expr
Foo = (x: string,
\ y: number,
\ z: bool): number => expr
Foo = (x: string,
\ y: number,
\ z: bool): number
\ => expr
Foo = (x: string,
\ y: number,
\ z: bool):
\ number => expr
# Funcref call
echo (() => 42)()
echo ((x: string): number => 42)("foo")
# :help vim9-lambda
var list = [1, 2, 3]
echo filter(list, (k, v) =>
v > 0)
echo filter(list, (k,
\ v)
\ => v > 0)
var Callback = (..._) => 'anything'
echo Callback(1, 2, 3) # displays "anything"
var Lambda = (arg) => {
g:was_called = 'yes'
return expr
}
var count = 0
var timer = timer_start(500, (_) => {
count += 1
echom 'Handler called ' .. count
}, {repeat: 3})
var dict = {}
var d = mapnew(dict, (k, v): string => {
return 'value'
})
# Issue #15970 (vim9: Restore and extend the recognition of Enum body items)
def Op(): func(func(number, number): number): func(number, Digit): number
return (F: func(number, number): number) =>
(x: number, y: Digit): number => F(x, y.value)
enddef ####################### ^ vimCommand?
# Issue #16965 (vim syntax: wrong highlight with lambda, autoload, and false keyword)
autocmd BufRead * timer_start(0, (_) => f#a(false, false))
autocmd
|