【已解决】加不加括号,效果截然不同

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: 【已解决】加不加括号,效果截然不同

Re: 【求助】加不加括号,效果截然不同

Post by amnesiac » 19 Apr 2014, 08:56

shingu wrote:
wz520 wrote:在 AHK 里本来就是两种语法,尽管违背了很多人的直觉。
看看帮助里的 “If" 和 "If (expression)" 吧
看过这两段的说明,但是还是有点理解不了。

不加括号是传统型,加括号是表达式
其中有历史渊源,AutoHotkey 最初参照 AutoIt v2,而后者是命令式语言。所以目前两种用法并存,在以后 AutoHotkey v2 中有可能会成为纯表达式用法。
刚接触时,建议习惯用表达式用法。

补充:你虽然看了 If 传统型和表达式的用法,实际上还不理解。

Code: Select all

if A_GuiControl <> MyListView 
这里 MyListView 是值,含义即是 A_GuiControl 变量的值不是 MyListView。

Code: Select all

if (A_GuiControl <> MyListView)
这里 MyListView 是变量,实际上你脚本中没有这个变量,即值为空,含义即是 A_GuiControl 的值不为空。
你理解了,才会知道怎样正确表达你的本意。

Re: 【求助】加不加括号,效果截然不同

Post by shingu » 16 Apr 2014, 03:36

wz520 wrote:在 AHK 里本来就是两种语法,尽管违背了很多人的直觉。
看看帮助里的 “If" 和 "If (expression)" 吧
看过这两段的说明,但是还是有点理解不了。

不加括号是传统型,加括号是表达式

Re: 【求助】加不加括号,效果截然不同

Post by shingu » 16 Apr 2014, 03:26

加上括号
GuiContextMenu:
if (A_GuiControl <> MyListView)
return
Menu, MyContextMenu, Show, %A_GuiX%, %A_GuiY%
return

只有在界面空白处点击右键会弹出菜单,这与本意不符!

不加括号
GuiContextMenu:
if A_GuiControl <> MyListView
return
Menu, MyContextMenu, Show, %A_GuiX%, %A_GuiY%
return

只有在MyListView控件上点击右键会弹出菜单

Re: 【求助】加不加括号,效果截然不同

Post by wz520 » 16 Apr 2014, 00:27

在 AHK 里本来就是两种语法,尽管违背了很多人的直觉。
看看帮助里的 “If" 和 "If (expression)" 吧

【已解决】加不加括号,效果截然不同

Post by shingu » 15 Apr 2014, 20:31

附件中的代码就是帮助文档中Gui ListView 控件中的示例,我稍微做了一点修改

Code: Select all

GuiContextMenu:  ; 运行此标签来响应右键点击或按下 Appskey.
if (A_GuiControl <> MyListView)  ; 仅在 ListView 中点击时才显示菜单.
    return
; 在提供的坐标处显示菜单, A_GuiX 和 A_GuiY.  应该使用这些
; 因为即使用户按下 Appskey 它们也会提供正确的坐标:
Menu, MyContextMenu, Show, %A_GuiX%, %A_GuiY%
return

就是在if判断条件加上了一对括号,结果竟然迥异。
Attachments
listview_demo.rar
(3.37 KiB) Downloaded 296 times

Top