Lua:在表中搜索键,如果没有则增加索引并重试

时间:2014-08-12 05:38:46

标签: checkbox lua vt100

情况:

table = { this, that, something else, x_coord, y_coord }
table.x_coord = { 1,2,3,4,7,8,n}
table.y_coord = { 2,4,5,9,n} -- numbers aren't fix
table.check_boxes = { [12] = a function,
                      [14] = a function,
                      [15] = a function,
                      [24] = a function,
                      [29] = a function,
                         ....(n) }

如您所见,x / y_coords形成了check_boxes。例如:

table.x_coord[1]..table.y_coord[1] ~ table.check_boxes[1]

我用它来移动check_boxes之间的终端光标。

现在的问题出在我的行动中。 目前我有一个功能,它根据给定的输入(箭头键)向左/右/上/下搜索下一个x / y_coord。 使用return / space我会调用复选框后面的函数。

现在,可以将Cursor设置在没有给出check_box的位置。实际上这并不是什么大不了的事,因为当输入==空格/返回时,输入操作程序会调用函数

table.check_boxes[table.x_coorx[x_index]..table.y_coords[y_index]]

因此,如果光标没有指向函数,则没有任何反应。 但现在我希望光标被强制到下一个check_box。我该怎么办?

到目前为止我的想法:

跟随x或y的函数,取决于左/右上/下输入:

while true do
    for k, v in pairs(table.check_boxes) do
        if(table.x_coord[x_index] .. table.y_coord[y_index] == k then break end
    end -- break -> okay, coord is at a checkbox

    x_index = x_index + 1 -- or -1 

    if table.x_coord[x_index] == nil then 
        x_index = 1
    end
end

问题现在是最后一个if不允许像x_coord = {1,3}这样的情况,因为如果达到2,它会将x_index设置为1.

任何提示?

修改: 现在我开始了这个:

function cursorTioNextBoxRight()
    searc_index = x_index
    search = true
    while search do
        search_index = search_index + 1

        if search_index > #table.x_coord then
            search_index = 1
        end

    for k, v in pairs(table.check_boxes) do
        if tonumber(table.x_coord[search_index..table.y_coord[y_index] == k then
            x_index = search_index -- YAAAY
            search = false
            break
         end
     end
end

我该死的。

2 个答案:

答案 0 :(得分:0)

local x_newIndex = x_index + 1 --[[ or -1 --]]
x_index = table.x_coord[x_newIndex] and x_newIndex or x_index
当x_newIndex存在于表中时,

x_index变为x_newIndex,否则它将保持旧的x_index

答案 1 :(得分:0)

function cursorTioNextBoxRight()
searc_index = x_index
search = true
while search do
    search_index = search_index + 1

    if search_index > #table.x_coord then
        search_index = 1
    end

for k, v in pairs(table.check_boxes) do
    if tonumber(table.x_coord[search_index..table.y_coord[y_index] == k then
        x_index = search_index -- YAAAY
        search = false
        break
     end
 end