对象名称为logtalk中的变量



是否有可能将对象的名称作为变量?我正在尝试将每个对象代表每个人的数据库。我有[名称/1,姓氏/1]的对象,但是当我问例如

x ::名称(约翰)。

它给了我一个错误。OFC使用此方法没有问题来获取原子:

object_id ::名称(x)。

::/2消息发送控制构造确实需要在呼叫时绑定的第一个参数。但是您可以使用current_object/1内置谓词枚举现有对象:

| ?- current_object(Person), Person::name(john).
...

但是,此解决方案也可能导致错误,因为我们将通过回溯来枚举所有对象,而不是所有这些都会理解name/1消息。因此,更好的解决方案是仅枚举了解name/1消息的对象。假设代表一个人实现的所有对象(直接或通过继承)person_protocol,我们可以使用conforms_to_protocol/2内置谓词:

| ?- conforms_to_protocol(Person, person_protocol),
     Person::name(john).
...

请参阅https://logtalk.org/manuals/refman/refman/predicates/conforms_to_protocol_2_33.html有关详细信息。

相关内容

  • 没有找到相关文章

最新更新