检查对象是否已经存在?
Check if object already exists?
我有:
:- 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”
您可以使用 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])
)).
P.S。您正在为 SWI-Prolog 使用 logtalk
包。但是这个包意味着 deployment,而不是 development,因为它将 Logtalk 发行版(包括文档)中的所有文件隐藏在用于包的隐藏目录中.
我有:
:- 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”
您可以使用 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])
)).
P.S。您正在为 SWI-Prolog 使用 logtalk
包。但是这个包意味着 deployment,而不是 development,因为它将 Logtalk 发行版(包括文档)中的所有文件隐藏在用于包的隐藏目录中.