我们所有使用的某些工具通常允许将字符串解析为可选命令。例如,对于大多数IRC工具,可以编写类似/msg <nick> hi there!
的内容,从而导致字符串被解析并执行命令。
我在周末考虑这个问题,并意识到我完全不知道如何能够强有力地实现这个功能。我的鸟瞰图对它的理解是每个输入都需要被解析,发现命令的潜在匹配,并且该命令需要在适当的验证下执行。
我在Python中为此写了一个快速的概念证明:
class InputParser:
def __init__(self):
self.command_character = '!!'
self.message = None
self.command = None
self.method = None
def process_message(self, message):
# every input into the system is sent through here. If the
# start of the string matches the command_character, try and
# find the command, otherwise return back the initial
# message.
self.message = message
if self.message.startswith(self.command_character):
self.command = self.message.split(' ')[0]
self.method = self.command.replace(self.command_character, '')
try:
return self.__class__.__dict__['_%s' % self.method]()
except KeyError:
# no matching command found, return the input message
return self.message
return self.message
def _yell(self):
# returns an uppercase string
return self.message.upper().replace(self.command, '')
def _me(self):
# returns a string wrapped by * characters
return ('*%s*' % self.message).replace(self.command, '')
使用示例:
!!yell hello friend
&gt; HELLO FRIEND
问题: 有人可以为我提供现有项目,现有库的链接,或者给我一个概念性的概述,以便有效地改变程序解释字符串的方式,从而导致应用程序的不同行为?
答案 0 :(得分:0)
不要乱砍类内部,最好使用字典将命令字符串映射到执行命令的函数。在类级别设置字典,如果在实例之间可能不同,则在__init__()
设置。
这样,字典有两个目的:一个用于提供有效的命令令牌,另一个用于将命令令牌映射到一个操作。