首页 > 解决方案 > 编译脚本中的异常

问题描述

我想分享一个问题,Exception(Message [, What, Extra])如果脚本是在 .exe 中编译的,则该函数无法按预期工作

class MyClass
{
    Method1() 
    {
         MsgBox % MyClass.Method2()
    }

    Method2()
    {
         return Exception("", -2).What
    }
}

MyClass.Method1()

在非编译MyClass.Method1()显示 MyClass.Method1

但在编译的 .exe 脚本中MyClass.Method1()显示 -2

如果脚本已编译,任何人都有解决方案来显示方法而不是数字?

标签: automationautohotkey

解决方案


它实际上确实按预期工作,因为这种行为在文档中有所说明:

如果省略What,则默认为当前函数或子例程的名称。否则,它可以是字符串或距调用堆栈顶部的负偏移量。例如,值 -1 设置Exception.What为当前函数或子例程,以及Exception.Line调用Exception.File它的行和文件。但是,如果脚本被编译或者偏移量无效,What只是简单地转换为字符串。

另外,我认为您在这里的实现有点奇怪,您肯定想抛出异常而不是返回它们吗?

无论如何,我想你的解决方案是自己实现这个。
例如,您可以将调用者作为参数传入:

instance := new MyClass

try
    instance.Method1()
catch e
    MsgBox, % e.What


class MyClass
{
    Method1() 
    {
        this.Method2(A_ThisFunc)
    }

    Method2(caller)
    {
        throw Exception("", caller)
    }
}

推荐阅读