comparison src/testdir/test_user_func.vim @ 16615:1a911bd57f11 v8.1.1310

patch 8.1.1310: named function arguments are never optional commit https://github.com/vim/vim/commit/42ae78cfff171fbd7412306083fe200245d7a7a6 Author: Bram Moolenaar <Bram@vim.org> Date: Thu May 9 21:08:58 2019 +0200 patch 8.1.1310: named function arguments are never optional Problem: Named function arguments are never optional. Solution: Support optional function arguments with a default value. (Andy Massimino, closes #3952)
author Bram Moolenaar <Bram@vim.org>
date Thu, 09 May 2019 21:15:05 +0200
parents 15f0f9f16cd9
children 9ffec4eb8d33
comparison
equal deleted inserted replaced
16614:306acde1a598 16615:1a911bd57f11
92 delfunc ListItem 92 delfunc ListItem
93 delfunc ListReset 93 delfunc ListReset
94 unlet g:retval g:counter 94 unlet g:retval g:counter
95 enew! 95 enew!
96 endfunc 96 endfunc
97
98 func Log(val, base = 10)
99 return log(a:val) / log(a:base)
100 endfunc
101
102 func Args(mandatory, optional = v:null, ...)
103 return deepcopy(a:)
104 endfunc
105
106 func Args2(a = 1, b = 2, c = 3)
107 return deepcopy(a:)
108 endfunc
109
110 func MakeBadFunc()
111 func s:fcn(a, b=1, c)
112 endfunc
113 endfunc
114
115 func Test_default_arg()
116 call assert_equal(1.0, Log(10))
117 call assert_equal(log(10), Log(10, exp(1)))
118 call assert_fails("call Log(1,2,3)", 'E118')
119
120 let res = Args(1)
121 call assert_equal(res.mandatory, 1)
122 call assert_equal(res.optional, v:null)
123 call assert_equal(res['0'], 0)
124
125 let res = Args(1,2)
126 call assert_equal(res.mandatory, 1)
127 call assert_equal(res.optional, 2)
128 call assert_equal(res['0'], 0)
129
130 let res = Args(1,2,3)
131 call assert_equal(res.mandatory, 1)
132 call assert_equal(res.optional, 2)
133 call assert_equal(res['0'], 1)
134
135 call assert_fails("call MakeBadFunc()", 'E989')
136 call assert_fails("fu F(a=1 ,) | endf", 'E475')
137
138 let d = Args2(7, v:none, 9)
139 call assert_equal([7, 2, 9], [d.a, d.b, d.c])
140
141 call assert_equal("\n"
142 \ .. " function Args2(a = 1, b = 2, c = 3)\n"
143 \ .. "1 return deepcopy(a:)\n"
144 \ .. " endfunction",
145 \ execute('func Args2'))
146 endfunc