我很好奇为什么这不起作用,需要知道为什么/如何解决它; 我试图检测一些输入是否是一个问题,我很确定string.match是我需要的,但是:
print(string.match("how much wood?", "(how|who|what|where|why|when).*\\?"))
返回零.我很确定Lua的string.match使用正则表达式来查找字符串中的匹配项,因为我在成功之前使用了通配符(.),但也许我不了解所有的机制?Lua在字符串函数中是否需要特殊的分隔符?我在这里测试了我的正则表达式,所以如果Lua使用常规正则表达式,似乎上面的代码会返回"how much wood?".
你能不能告诉我我做错了什么,我的意思是什么,或者指出一个很好的参考,我可以获得有关Lua的字符串操作函数如何利用正则表达式的全面信息?
这个错误意味着什么,为什么适用?在一个与我的情况相关的案例中,我无法找到关于成员类和静态上下文的内容,或者那些含义的内容.
这是我得到的错误:
non-static variable this cannot be referenced from a static context
它指向这一行,并指向new运营商:
throw new ParenthesisException();
ParenthesisException是主类的私有成员类.我认为问题可能与此有关,但这就是我所能想到的.
这是我对ParenthesisException的定义.它在主类定义中:(如果格式不是很好,我很抱歉)
private class ParenthesisException extends Throwable
{
public ParenthesisException(){}
public String strErrMsg()
{
return "ERROR: Every '(' needs a matching ')'";
}
}
Run Code Online (Sandbox Code Playgroud)
我发现错误信息相当神秘.我将非常感谢"静态上下文"的简要说明,以及为什么new运算符不适用于我的成员类,以及如何抛出私有成员类的实例.
正如标题所示,我在抛出静态成员类时遇到了一些问题.但我不确定这是不是问题,编译器给了我关于我应该做什么的混合信号!我的程序的类和函数都在一个文件中.
这是我的一个Throwables的定义(其他的基本相同):
private static class ParenthesisException extends Throwable
{
public ParenthesisException(){}
public String strErrMsg()
{
return "ERROR: Every '(' needs a matching ')'";
}
}
Run Code Online (Sandbox Code Playgroud)
我把它放在一个成员函数中,该函数main在try/catch语句中被调用.我把我的另一个Throwable类放在一个被maintry/catch语句调用的函数调用的函数中.以下是它的一小部分:
try
{
parseFormula(cin.nextLine());
}
catch(ParenthesisException e)
{
System.out.println(e.strErrMsg());
}
catch(OperatorException e)
{
System.out.println(e.strErrMsg());
}
Run Code Online (Sandbox Code Playgroud)
parseFormula是静态成员函数throw ParenthesisException.
编译器说:
jcalc.ParenthesisException的无法访问的catch块.永远不会从try语句主体抛出此异常
但我确实把它扔在了parseFormula中:
if(n_lpar != n_rpar)
throw new ParenthesisException();
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我删除try/catch时,它告诉我异常没有被捕获.这让我感到困惑,因为之前,它说它ParenthesisException从未被抛出,现在它说它从未被捕获,但被抛出.
我想知道这是否与它们都是静态成员(类和函数)的方式有关,以及我如何解决这个问题.