|
楼主 |
发表于 2023-7-10 08:06:55
|
显示全部楼层
Python语言里,函数是第一类对象。在Alias的构造函数中,OnSuccess命名参数所传递的只是self.getfromcorpse函数的引用而并非函数调用。真正的getfromcorpse函数在下面,定义是这样的:
def getfromcorpse(self, name, line, wildcards):
cmd = f"get {wildcards[0]} from corpse"
self.session.writeline(cmd)
可以看到,该函数带有4个参数。除类的自引用self之外,name,line,wildcards分别代表Alias的名称、捕获的整行的内容、正则表达式匹配里的捕获结果(数组形式)。在PyMUD系统执行捕获到Alias输入时,会自动将相关参数传递到onSuccess对应的引用函数中,因此,里面的wildcards[0]就是正则表达式^gp\s(.+)$里的(.+)所匹配的内容。
例如,当输入gp gold命令时,PyMUD会自动进行正则表达式匹配,并将匹配结果gold存入wildcards[0]中,这样在下面的onSuccess时,cmd会格式化为get gold from corpse,并最终通过session.writeline发送到服务器。 |
|