mirror of
https://github.com/neovim/neovim.git
synced 2026-05-05 05:25:10 +00:00
vim-patch:7.4.1989
Problem: filter() and map() only accept a string argument.
Solution: Implement using a Funcref argument (Yasuhiro Matsumoto, Ken
Takata)
b33c7eb5b8
This commit is contained in:
@@ -14,6 +14,14 @@ func MySort(up, one, two)
|
||||
return a:one < a:two ? 1 : -1
|
||||
endfunc
|
||||
|
||||
func MyMap(sub, index, val)
|
||||
return a:val - a:sub
|
||||
endfunc
|
||||
|
||||
func MyFilter(threshold, index, val)
|
||||
return a:val > a:threshold
|
||||
endfunc
|
||||
|
||||
func Test_partial_args()
|
||||
let Cb = function('MyFunc', ["foo", "bar"])
|
||||
|
||||
@@ -36,6 +44,16 @@ func Test_partial_args()
|
||||
call assert_equal([1, 2, 3], sort([3, 1, 2], Sort))
|
||||
let Sort = function('MySort', [0])
|
||||
call assert_equal([3, 2, 1], sort([3, 1, 2], Sort))
|
||||
|
||||
let Map = function('MyMap', [2])
|
||||
call assert_equal([-1, 0, 1], map([1, 2, 3], Map))
|
||||
let Map = function('MyMap', [3])
|
||||
call assert_equal([-2, -1, 0], map([1, 2, 3], Map))
|
||||
|
||||
let Filter = function('MyFilter', [1])
|
||||
call assert_equal([2, 3], filter([1, 2, 3], Filter))
|
||||
let Filter = function('MyFilter', [2])
|
||||
call assert_equal([3], filter([1, 2, 3], Filter))
|
||||
endfunc
|
||||
|
||||
func MyDictFunc(arg1, arg2) dict
|
||||
@@ -59,6 +77,9 @@ func Test_partial_dict()
|
||||
call assert_equal("hello/xxx/yyy", Cb("xxx", "yyy"))
|
||||
call assert_fails('Cb("fff")', 'E492:')
|
||||
|
||||
let Cb = function('MyDictFunc', dict)
|
||||
call assert_equal({"foo": "hello/foo/1", "bar": "hello/bar/2"}, map({"foo": 1, "bar": 2}, Cb))
|
||||
|
||||
let dict = {"tr": function('tr', ['hello', 'h', 'H'])}
|
||||
call assert_equal("Hello", dict.tr())
|
||||
endfunc
|
||||
|
||||
Reference in New Issue
Block a user