微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查对象是否已经存在?

如何解决检查对象是否已经存在?

我有

:- use_module(library(logtalk)).
:- {buffer}.
:- initialization(main).

main :-
    create_object(env,[instantiates(buffer)],[],[]),

它可以工作,但每次我重新查看文件时它都会发出错误消息,因为对象已经存在。

有没有办法检查对象是否已经存在并跳过重新创建它?


更多代码

:- use_module(library(logtalk)).

:- consult(utils).

%% :- initialization((
%%     logtalk_load([buffer,env]).
%% )).
:- {buffer}.
:- initialization(main).

main :-
    %% create_object(env,env::set(uid,0),env::set(name,"").

这有效:

:- initialization((
    logtalk_load([buffer])
)).

即没有点也没有“env”

解决方法

您可以使用 current_object/1 谓词检查对象是否存在。但是从您的代码片段看来,您可以简单地在源文件中定义 env 对象。如果您需要 env 成为动态对象(为什么?),请使用 dynamic/0 指令:

:- object(env,instantiates(buffer)).

    :- (dynamic)/0.

:- end_object

顺便说一句,永远不要在源文件中使用顶级缩写(例如{}/1);它们不是语言的一部分。改写:

:- use_module(library(logtalk)).
:- initialization((
    logtalk_load([buffer,env])
)).

附言您正在使用 SWI-Prolog 的 logtalk 包。但是这个包用于部署,而不是开发,因为它将 Logtalk 发行版中的所有文件(包括文档)隐藏在用于包的隐藏目录中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。