在 Logtalk 中作为 object_identifier 的整数
Integer as object_identifier in Logtalk
我有协议同学:
:- protocol(student).
:- public([
name/1,
surname/1,
studies/1,
marks/1
]).
:- end_protocol.
现在我想创建一个名称为 ID(整数)的对象,但是当我尝试使用 create_object(18342, [implements(student)], [], [name(john), surname(smith), studies(it), marks(ok)]).
swilgt 给 mi 错误:
ERROR: Type error: 'object_identifier' expected, found '18342' (an integer)
当然我可以使用引号,但我不想。
是否可以选择使用整数作为名称,或者我是否使用字符串并将 id/1 添加到协议中?
确实(目前)无法使用整数作为对象标识符。一种替代方法确实是使用原子,例如'133'
而不是 123
。不要使用字符串,例如"123"
因为双引号文本的实际含义取决于 double_quotes
标准 Prolog 标志,其唯一可移植值是 codes
(即 "123"
被解析为 [49,50,51]
.
一种在整数和原子之间转换的可移植方法是使用标准谓词 number_codes/2
和 atom_codes/2
(或 number_chars/2
和 atom_chars/2
)。一些受支持的后端 Prolog 系统还提供专有的内置谓词以直接在数字和原子之间进行转换。
我有协议同学:
:- protocol(student).
:- public([
name/1,
surname/1,
studies/1,
marks/1
]).
:- end_protocol.
现在我想创建一个名称为 ID(整数)的对象,但是当我尝试使用 create_object(18342, [implements(student)], [], [name(john), surname(smith), studies(it), marks(ok)]).
swilgt 给 mi 错误:
ERROR: Type error: 'object_identifier' expected, found '18342' (an integer)
当然我可以使用引号,但我不想。 是否可以选择使用整数作为名称,或者我是否使用字符串并将 id/1 添加到协议中?
确实(目前)无法使用整数作为对象标识符。一种替代方法确实是使用原子,例如'133'
而不是 123
。不要使用字符串,例如"123"
因为双引号文本的实际含义取决于 double_quotes
标准 Prolog 标志,其唯一可移植值是 codes
(即 "123"
被解析为 [49,50,51]
.
一种在整数和原子之间转换的可移植方法是使用标准谓词 number_codes/2
和 atom_codes/2
(或 number_chars/2
和 atom_chars/2
)。一些受支持的后端 Prolog 系统还提供专有的内置谓词以直接在数字和原子之间进行转换。