-1

だから私は宣言した型を持っていて、それは人々の名前を参照しており、名前の1つはたとえば「Do」です

type name is (BOB, SKIPPY, DO)

コンパイラ エラー: 予約語 "Do" は識別子として使用できません。

文字列を使用せずに、この周りにどこかありますか? 先生が私たちにひもを強要するためにわざとそうしたようです。

汎用パッケージを作成したので、変数文字列型を作成し、代わりにそれをインスタンス化する方が簡単でしょうか?

4

2 に答える 2

4

予約語は予約語であり、話の終わりです。

特定の状況で予約語が最適な単語である場合に、一般的に使用されるテクニックがいくつかあります。

  • たとえば、(Name_Bob、Name_Skippy、Name_Do); というプレフィックスを付けます。
  • たとえば、(Bob_Name、Skippy_Name、Do_Name); のようにサフィックスを付けます。
  • 「スペルミス」、例えば (Bob、Skippy、Do_Do);

出力した場合にこれがどのように見えるか心配な場合は、単純な列挙型から文字列への属性である「画像」は、列挙値の文字通りの描写であるため、通常はお勧めできません。したがって、出力の内容は次のようになります。選択したコーディング識別子と密接に結び付いています。デバッグには問題ありませんが、人間が読める出力には、列挙値の大文字と小文字を区別するか、列挙型から文字列へのマップを使用するなど、別のものを使用する必要があります。

なんらかのやむを得ない理由がない限り、文字列を使用して列挙値を表すことによって得られるものは何もありません。

于 2012-12-07T21:44:53.407 に答える
2

プレフィックス [またはサフィックス] オプションを使用すると、次のようなことができます。

type Names is ( Name_Bobby, Name_Dave, Name_Calvin, Name_Do );

Function Put( Item : In names ) Return String is
  Prolog : Constant String:= "Name_";
  Image  : Constant String:= Item'Image;
begin
  Return Image( Image'First+Prolog'Length..Image'Last );
end Put;
于 2012-12-08T18:41:46.083 に答える