Mercurial > vim
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 |