forked from aniani/vim
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)
This commit is contained in:
@@ -94,3 +94,53 @@ func Test_user_func()
|
||||
unlet g:retval g:counter
|
||||
enew!
|
||||
endfunc
|
||||
|
||||
func Log(val, base = 10)
|
||||
return log(a:val) / log(a:base)
|
||||
endfunc
|
||||
|
||||
func Args(mandatory, optional = v:null, ...)
|
||||
return deepcopy(a:)
|
||||
endfunc
|
||||
|
||||
func Args2(a = 1, b = 2, c = 3)
|
||||
return deepcopy(a:)
|
||||
endfunc
|
||||
|
||||
func MakeBadFunc()
|
||||
func s:fcn(a, b=1, c)
|
||||
endfunc
|
||||
endfunc
|
||||
|
||||
func Test_default_arg()
|
||||
call assert_equal(1.0, Log(10))
|
||||
call assert_equal(log(10), Log(10, exp(1)))
|
||||
call assert_fails("call Log(1,2,3)", 'E118')
|
||||
|
||||
let res = Args(1)
|
||||
call assert_equal(res.mandatory, 1)
|
||||
call assert_equal(res.optional, v:null)
|
||||
call assert_equal(res['0'], 0)
|
||||
|
||||
let res = Args(1,2)
|
||||
call assert_equal(res.mandatory, 1)
|
||||
call assert_equal(res.optional, 2)
|
||||
call assert_equal(res['0'], 0)
|
||||
|
||||
let res = Args(1,2,3)
|
||||
call assert_equal(res.mandatory, 1)
|
||||
call assert_equal(res.optional, 2)
|
||||
call assert_equal(res['0'], 1)
|
||||
|
||||
call assert_fails("call MakeBadFunc()", 'E989')
|
||||
call assert_fails("fu F(a=1 ,) | endf", 'E475')
|
||||
|
||||
let d = Args2(7, v:none, 9)
|
||||
call assert_equal([7, 2, 9], [d.a, d.b, d.c])
|
||||
|
||||
call assert_equal("\n"
|
||||
\ .. " function Args2(a = 1, b = 2, c = 3)\n"
|
||||
\ .. "1 return deepcopy(a:)\n"
|
||||
\ .. " endfunction",
|
||||
\ execute('func Args2'))
|
||||
endfunc
|
||||
|
Reference in New Issue
Block a user