首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象名作为Logtalk中的变量

对象名作为Logtalk中的变量
EN

Stack Overflow用户
提问于 2018-12-17 08:55:17
回答 1查看 23关注 0票数 1

这可以将对象的名称作为变量来获取吗?我试图建立一个数据库,其中每个对象代表每个人。我有名字/1,姓/1的对象,但是当我问。

X::姓名(约翰)

这给了我一个错误。Ofc使用这种方法获取原子没有问题:

object_id::name(X).

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-17 18:06:31

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

代码语言:javascript
复制
| ?- current_object(Person), Person::name(john).
...

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

代码语言:javascript
复制
| ?- conforms_to_protocol(Person, person_protocol),
     Person::name(john).
...

详情请参见3.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53811729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档