-1

我有 :

:- 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,[instantiates(buffer)],[],[]), 
    env::set(uid,0), env::set(name,"").

这有效:

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

即没有点也没有“env”

4

1 回答 1

1

您可以使用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])
)).

PS 你正在使用logtalkSWI-Prolog 的包。但是这个包意味着 部署,而不是开发,因为它将 Logtalk 发行版上的所有文件(包括文档)隐藏在用于包的隐藏目录中。

于 2021-01-18T19:38:49.087 回答