我在Pascal中使用简单集,只想输出集合的内容。每次运行代码时,我都会收到以下错误消息:' project1.lpr(17,13)错误:无法读取或写入此类型的变量'。
这是我的代码:
program Project1;
{$mode objfpc}{$H+}
uses
sysutils;
type TFriends = (Anne,Bob,Claire,Derek,Edgar,Francy);
type TFriendGroup = Set of TFriends;
Var set1,set2,set3,set4:TFriendGroup; x:integer;
begin
set1:=[Anne,Bob,Claire];
set2:=[Claire,Derek];
set3:=[Derek,Edgar,Francy];
writeln(set1);
readln;
end.
输出集是否有特殊的方法/功能?
感谢
答案 0 :(得分:5)
Free Pascal允许没有明确的typinfo调用的枚举的write / writeln()。
所以
{$mode objfpc} // or Delphi, For..in needs Object Pascal dialect iirc.
var Person :TFriends;
for Person in Set1 do
writeln(Person);
工作正常。
使用WriteStr这也可以写入字符串。 (writestr函数类似于write / writestr但后来是一个字符串。最初是为ISO / Mac方言实现的)
答案 1 :(得分:3)
您无法直接将字符集显示为字符串,因为没有为其发出类型信息。为此,您的设置必须是类的已发布属性。
在类中发布后,您可以使用单位 TypInfo ,使用函数 SetToString()将该集显示为字符串。 TypInfo 是FPC单元,它执行所有编译器反射。
您尝试做的简短工作示例:
program Project1;
{$mode objfpc}{$H+}
uses
sysutils, typinfo;
type
TFriends = (Anne,Bob,Claire,Derek,Edgar,Francy);
TFriendGroup = Set of TFriends;
TFoo = class
private
fFriends: TFriendGroup;
published
property Friends: TFriendGroup read fFriends write fFriends;
end;
Var
Foo: TFoo;
FriendsAsString: string;
Infs: PTypeInfo;
begin
Foo := TFoo.Create;
Foo.Friends := [Derek, Edgar, Francy];
//
Infs := TypeInfo(Foo.Friends);
FriendsAsString := SetToString(Infs, LongInt(Foo.Friends), true);
//
Foo.Free;
writeln(FriendsAsString);
readln;
end.
该程序输出:
[德里克,埃德加,Francy]
更进一步: