Class 如何在Pascal中检查对象的有效方法名?

Class 如何在Pascal中检查对象的有效方法名?,class,object,methods,pascal,Class,Object,Methods,Pascal,我有一个类(角色),它继承了一些类(士兵、医疗兵等),这些类有特定的游戏相关方法。例如射击或治疗 例如,我希望用户可以输入Heal,程序可以检查他们的字符类型,从而查看该对象中的方法名称是否有效 我知道这在其他语言中是可能的,但在帕斯卡语言中看不到如何做到这一点。它必须在免费的Pascal和Delphi中工作。谢谢你你不需要检查方法名的有效性就可以做到这一点,如果你不这样做的话可能会更好 您可以使用RTTI检查方法名,但在FreePascal中实现的方式与Delphi有所不同(特别是对于扩展RT

我有一个类(角色),它继承了一些类(士兵、医疗兵等),这些类有特定的游戏相关方法。例如射击或治疗

例如,我希望用户可以输入Heal,程序可以检查他们的字符类型,从而查看该对象中的方法名称是否有效


我知道这在其他语言中是可能的,但在帕斯卡语言中看不到如何做到这一点。它必须在免费的Pascal和Delphi中工作。谢谢你

你不需要检查方法名的有效性就可以做到这一点,如果你不这样做的话可能会更好

您可以使用RTTI检查方法名,但在FreePascal中实现的方式与Delphi有所不同(特别是对于扩展RTTI)

然而,实现您自己的查找机制来解析某种字典中的游戏中实体名称、属性和动词要简单得多。这在FP和Delphi中都是微不足道的,并且与所使用的编译器无关。它还允许最终用户使用的名称独立于代码中使用的名称,这将更容易国际化等。它还可以避免游戏中的标识符包含Pascal标识符中不允许的字符(例如空格、重音字符或其他字符)时出现的问题


PS:你没有问这个,但是。。。如果我正在考虑编写任何大小的文本游戏,我会认真考虑将它作为Prolog的混合Delphi来做:GUI和Prolog的DelPI作为一种更容易的语言来编码游戏中的动作、对象和规则,并且有一种实现,AMZI Prolog,它有一个非常丰富的接口,用于将Prolog引擎与Delphi进行接口-请参阅。Amzi过去是商业化的,但现在是PD,fwiw。

为什么您认为需要检查方法名的有效性才能做到这一点?您可以使用RTTI来实现,但在FreePascal中实现的方式与Delphi有所不同(特别是对于扩展RTTI)。实现您自己的查找机制来解析游戏中的属性和某种字典中的动词要简单得多。这在FP和Delphi中都是微不足道的,并且与所使用的编译器无关。它还允许最终用户使用的名称独立于代码中使用的名称,这将更容易国际化,等等?谢谢!这和满足项目规范一样重要。我的直觉反应是,我最好在代码中以不同的方式处理这个问题。我希望确保没有简单的解决方案。非常感谢。很高兴它有帮助-我已经把它转换成了一个答案。