分页: 2 / 2

Re: vim script 不定参数问题

发表于 : 2011-05-02 15:29
acer4740
自由建客 写了:FunOp 的接口不能变动,这是规定

那就这样

代码: 全选

call Fun(1, 2, 3)

let args=join(a:000, ', ')

exe "call FunOp(".args.")"

Re: vim script 不定参数问题

发表于 : 2011-05-02 16:27
自由建客
acer4740, 要的就是这个!可以把自己实现的 Args 删掉了!就这样了! :em11

Re: vim script 不定参数问题

发表于 : 2011-05-02 17:03
lilydjwg
帮助里还有这个

代码: 全选

:let r = call(Fn, mylist)

Re: vim script 不定参数问题

发表于 : 2011-05-02 17:05
acer4740
lilydjwg 写了:帮助里还有这个

代码: 全选

:let r = call(Fn, mylist)

哈哈,这个厉害

Re: vim script 不定参数问题

发表于 : 2011-05-02 18:06
自由建客
lilydjwg, NB,不过在我这个场合下有些麻烦,还是 join 简单些

代码: 全选

fun Lib_Load(name, ...)
	" 预处理
	exe "let snr = s:Lib_LoadOp(resolve(path)," . join(a:000, ",") . ")"
	return snr
endfun

fun Lib_LoadAll(name, ...)
	let snrs=[]
	for path in Lib_ListPath(a:name)
		exe "let snr = s:Lib_LoadOp(path," . join(a:000, ",") . ")"
		if snr!=""
			call add(snrs, snr)
		endif
	endfor
	return snrs
endfun

fun s:Lib_LoadOp(path, ...)
	" 一些具体操作
	let snr="<SNR>".sid."_"
	if exists("*".snr."Load")
		exe "call ". snr . "Load(sid, ref," . join(a:000, ",") . ")"
	endif
	" 又一些操作
	return snr
endfun

Re: vim script 不定参数问题

发表于 : 2011-05-02 18:34
fanhe
都跟你提过有 a:000 了,还是不知道怎么用啊。

凡是用上了 exec,都没有什么好的可读性

前些天实现的把 s: 作其他脚本的回调函数,才叫一个绕弯。

Re: vim script 不定参数问题

发表于 : 2011-05-02 18:52
lilydjwg
fanhe 写了:都跟你提过有 a:000 了,还是不知道怎么用啊。

凡是用上了 exec,都没有什么好的可读性

前些天实现的把 s: 作其他脚本的回调函数,才叫一个绕弯。
Vim 里很多时候不得不 exec。实在不行还是用 Python 吧。

Re: vim script 不定参数问题

发表于 : 2011-05-02 19:55
自由建客
fanhe, 不明白你到底想要表达什么

Re: vim script 不定参数问题

发表于 : 2011-05-02 22:19
自由建客
acer4740, 有 bug ,join() 是把内容连接成字符串,不行。又返回 13 楼的方案了。
lilydjwg说的 call() 也是可以的,只是觉得要先构造列表比较麻烦。