class - 如何在 Pascal 中检查对象的有效方法名称?
问题描述
我有一个具有特定游戏相关方法的继承类(士兵、军医等)的类(角色)。例如射击或治疗。
例如,我想要它以便用户可以输入 Heal,并且程序可以检查他们拥有的字符类型,从而查看这是否是该对象中方法的有效名称。
我知道这在其他语言中是可能的,但在 Pascal 中看不到如何做到这一点。它必须在 Free Pascal 和 Delphi 中工作。谢谢
解决方案
您不需要能够检查方法名称的有效性来执行此操作,如果您不这样做可能更可取。
您可以使用 RTTI 检查方法名称,但在 FreePascal 中的实现方式与 Delphi 有所不同(特别是对于扩展 RTTI)。
但是,实现您自己的查找机制来解析某种字典中的游戏中实体名称、属性和动词会更加直接。这在 FP 和 Delphi 中都是微不足道的,并且与使用的编译器无关。它还将允许最终用户使用的名称独立于代码中使用的名称,这将更容易国际化等。它还将避免如果游戏中的标识符包含不允许的字符而出现的问题在 Pascal 标识符中(例如空格、重音字符或其他)。
PS:你没有问这个,但是......如果我正在考虑编写任何大小的文本游戏,我会认真考虑将它作为 Prolog 的混合 Delphi:Delpi for the gui 和 Prolog 作为一种更容易的语言在其中对游戏中的动作、对象和规则进行编码,并且有一个特殊的实现,Amzi Prolog,它具有非常丰富的接口,用于将 Prolog 引擎与 Delphi 连接 -请参阅https://www.amzi.com/#apls . Amzi 曾经是商业的,但现在是 PD,fwiw。
推荐阅读
- python - 在不导入/运行的情况下查看另一个 Python 文件的变量
- scala - 将scala代码转换为python LDA
- android - JobService 未发送通知
- javascript - 如何在php中使用ckeditor
- android - VertScrollBox 当底部到达 android 和 IOS 时检测
- c++ - 本征和巨大的密集二维阵列
- rust - “借来的数据不能存储在其关闭之外”是什么意思?
- javascript - 如何在 Angular 6 中添加脚本文件?
- python - Keras 在一类 Cifar-10 上过拟合
- java - 如何使用延迟初始化?[延迟初始化异常]