Autohotkey迭代循环,但只有在键匹配输入时才返回值

时间:2016-02-12 18:45:02

标签: autohotkey

假设我有以下

^!r::
  InputBox, input, Enter the string
  if (input = "trip")
  {
    TripFunction()
  }
  else if (input = "leave")
  {
    LeaveFunction()
  }
  else
  {
    Msgbox, That word isnt defined.
  }
Return

但是,预计必须添加大量不同的情况进行测试,我认为最好的想法是将其放入数组中,并遍历数组,查找匹配的键,返回值(函数) ,而不再遍历字典。所以现在,我有这样的事情:

^!r::
  InputBox, input, Enter the string
  dict = { "trip": TripFunction(), "leave": LeaveFunction() }
  for k, v in dict
  {
    ...
    see if k = "trip", if so, return TripFunction(), if not, go to next
    item in array
    ...
  }
Return

我遇到的麻烦是,一旦它成功匹配字典中的一个键,它将返回所有相关值。我应该在括号内做什么来做我想做的事?

1 个答案:

答案 0 :(得分:2)

您使用了错误的equal sign operator(使用:=进行非文字作业而不是=

此外,在行dict = { "trip": TripFunction(), "leave": LeaveFunction() }中,执行tripfunction aind leavefunction,这可能是你不想要的。

尝试:

^!r::
  InputBox, input, Enter the string
  dict := { "trip": "TripFunction", "leave": "LeaveFunction" }
  for k, v in dict
  {
    if(k==input) {
        %v%() ; documentation: https://autohotkey.com/docs/Functions.htm#DynCall
        break
    }
  }
Return

TripFunction() {
    msgbox trip
}

LeaveFunction() {
    msgbox leave
}