如何使用range()从字符串中创建数字列表?

时间:2016-01-24 11:29:17

标签: string list vim split range

我知道你可以使用split函数从字符串创建一个数字列表:

let Items = '1,3,5,7'
let MyList = split(Items, ',')
echo MyList --> [1,3,5,7]

但如何使用range()

从字符串中创建数字列表

这不起作用(尾随字符错误):

let Items = '1,100,2'
let MyList = range(eval(Items))
echo MyList --> trailing characters error

2 个答案:

答案 0 :(得分:4)

eval(Items)没有任何意义。你可能想要这样的东西:

:let Items='1,100,2'
:let MyList=split(Items,',')
echo range(MyList[0],MyList[1],MyList[2])

答案 1 :(得分:1)

要使用eval,您必须有一个表示("包含")完整表达式的字符串。如果要将Items字符串用作range函数的参数,则可以连接表示range调用的字符串并对其进行评估,如下所示:

let Items = '1,100,2'
let MyList = eval( 'range(' . Items . ')' )

我不认为这样做是个好主意,但这是可能的。

对于列表和词组,

evalstring相反,因此使用split(Items)获取列表的替代方法是eval('[' . Items . ']')。但拆分字符串似乎更容易,也更安全。