gpt4 book ai didi

variables - 如何在没有 “possibly used before declaration” -errors的情况下访问局部范围内的全局变量?

转载 作者:行者123 更新时间:2023-12-03 07:43:29 24 4
gpt4 key购买 nike

我收到此警告:我的函数的WARNING: $a possibly used before declaration.:

Func test()
If (IsDeclared("a")) Then
ConsoleWrite($a)
Else
ConsoleWrite("Not declared")
EndIf
EndFunc

Global $a = "test"

test()

通过使用全局变量作为函数的参数可以避免。但是我需要这种构造,因为它与文件操作有关,我不想在每次需要该变量时都执行该文件操作。

我如何才能做到这一点而又不产生“可能在声明前使用”错误?

最佳答案

首先,此警告是由Au3Check.exe报告的,Au3Check.exe是与AutoIt编译器本身分开的程序。您会发现打印此警告后,程序仍将编译/运行。一种可能的解决方案是忽略它,或者不对您的代码运行Au3Check(不建议)。

如果仅在最后定义函数,则代码将正常工作。您可能已经意识到这一点,并且我知道当您使用#include函数时,它们可能会位于顶部。

如果真的很烦您,另一种可能的解决方案是使用Eval。我不建议这样做,因为它不需要使用,并且如果使用Au3Stripper(曾经是混淆器),则会破坏脚本,尽管使用IsDeclared已经破坏了您的代码。

您可能没有想到的解决方案(可能是最好的解决方案)就是使用Dim

Func test()
If(IsDeclared("a")) Then
Dim $a

ConsoleWrite($a & @LF)
Else
ConsoleWrite("Not declared" & @LF)
EndIf
EndFunc

Global $a = "test"

test()

基本上, Dim的行为类似于 Local,除非在全局范围中已经存在具有该名称的变量,在这种情况下,它将被重用。

关于variables - 如何在没有 “possibly used before declaration” -errors的情况下访问局部范围内的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23634227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com