首页 > 解决方案 > 两个警告“此局部变量与全局变量同名”和“没有匹配 IF 的 ELSE”

问题描述

我收到两个奇怪的警告。

这是整个脚本。

#NoEnv  
#Warn  
SendMode Input  
SetWorkingDir %A_ScriptDir%  

screen_scaling_factor := A_ScreenDPI/96

^p::mouse_move_win(200,300)

mouse_move_win(x,y,horizontal:="left",vertical:="top",mouse_click:=""){
    wingetpos,wx,wy,ww,wh,a
    global screen_scaling_factor
    if horizontal="left"{
        x1 := wx + x * screen_scaling_factor
    }else{
        x1 := wx + ww - x * screen_scaling_factor
    }
    if vertical="top"{
        y1 := wy + y * screen_scaling_factor
    }else{
        y1 := wy + wh - y * screen_scaling_factor
    }
    DllCall("SetCursorPos", int, x1, int, y1)       
}
if (horizontal="left"){
    x1 := wx + x * screen_scaling_factor
}else{
    x1 := wx + ww - x * screen_scaling_factor
}

或者

if horizontal="left"
    x1 := wx + x * screen_scaling_factor
else
    x1 := wx + ww - x * screen_scaling_factor

知道为什么会这样吗?

标签: variablesdebuggingscopeconditional-statementsautohotkey

解决方案


如果你想使用传统风格的 if 语句(请不要),你不能从 if 语句的同一行开始你的大括号。您必须将起始大括号{放下一行。

但是请像这样使用现代表达风格的 if 语句:

mouse_move_win(x,y,horizontal:="left",vertical:="top",mouse_click:=""){
    wingetpos,wx,wy,ww,wh,a
    global screen_scaling_factor
    if (horizontal="left"){
        x1 := wx + x * screen_scaling_factor
    }else{
        x1 := wx + ww - x * screen_scaling_factor
    }
    if (vertical="top"){
        y1 := wy + y * screen_scaling_factor
    }else{
        y1 := wy + wh - y * screen_scaling_factor
    }
    DllCall("SetCursorPos", int, x1, int, y1)       
}

另外,我个人认为这种支架风格很恶心,但当然这只是个人喜好哈哈。
但是以防万一您不知道,您可以从一个衬里 if/else 语句中省略大括号:

mouse_move_win(x,y,horizontal:="left",vertical:="top",mouse_click:="")
{
    wingetpos,wx,wy,ww,wh,a
    global screen_scaling_factor
    if (horizontal="left")
        x1 := wx + x * screen_scaling_factor
    else
        x1 := wx + ww - x * screen_scaling_factor
    if (vertical="top")
        y1 := wy + y * screen_scaling_factor
    else
        y1 := wy + wh - y * screen_scaling_factor
    DllCall("SetCursorPos", int, x1, int, y1)       
}

编辑:哦,看来你编辑了你的帖子。我在你编辑之前就开始打字了,但后来我不得不去做点什么。
无论如何,我的回答应该能回答你的问题。


推荐阅读