ループパラメータのタイプ

クリスホブス

初心者の質問、怖いです。配列内の特定の要素の位置(インデックス)を記録する必要があります。次のことを考慮してください。

with Ada.Text_IO; use Ada.Text_IO;

procedure Main is

    Ten : constant Positive := 10;

    type ArrayIndex is new Positive range 1 .. Ten;

    type MyRecord is record
        firstItem  : Integer;
        secondItem : Integer;
    end record;

    TheRecords : array (1 .. Ten) of MyRecord;

    indexOfElement50  :  ArrayIndex := 1;

begin

    -- set the values in TheRecords

    for i in TheRecords'Range loop
        TheRecords(i).firstItem  := i * 10;
        TheRecords(i).secondItem := i * 20;
    end loop;

    -- find which element of TheRecords has a
    -- firstItem with a value of 50

    for i in TheRecords'Range loop
        if TheRecords(i).firstItem = 50 then
            -- this next line is horrible: I should
            -- not be required to do type casting
            -- in a strongly-typed language.

            indexOfElement50 := ArrayIndex(i);
            exit;
        end if;
    end loop;

    Put(ArrayIndex'image(indexOfElement50));

end Main;

「TheRecordsのどの要素に値が50のfirstItemがあるかを見つける」というコメントに至るまで、すべてが私が抱えている問題を設定しているだけです(もちろん、はるかに大きなプログラムで)。

CとPythonの世界から来ましたが、私はAdaでの強い型付けについて宗教的にしようとしてきました。そのため、「indexOfElement50」を慎重に定義し、firstItemが50であるTheRecordsの要素のインデックスにします。コメントの下で始まるループは、その要素を検索するコードです。そしてそれを見つけます!

しかし、それから私はiをArrayIndexになるようにキャストする必要があります。そして、強く型付けされた世界では、キャストはとても間違っています。indexOfElement50をループパラメーターとして使用しようとしましたが、コンパイラーにはそのいずれもありません。

したがって、indexOfElement50を整数として宣言する(範囲を制限するガイドラインを可能な限り破る)か、型キャストを実行する(Cでは優れていますが、行うべきではない)必要があるようです。強く型付けされた言語)。

または、おそらく、私は本当に明白な何かを見逃しており、これは専門家によって熱心に指摘されます。

サイモンライト

アプローチを少し逆にしたいと思います。

with Ada.Text_IO; use Ada.Text_IO;

procedure Main is

Ten値10の名前の定数は本当に必要ありません後で12にしたい場合はどうしますか?

   type MyRecord is record
      firstItem  : Integer;
      secondItem : Integer;
   end record;

レコードの配列が必要ですが、必要な期間の決定を延期しましょう...

   type Record_Array is array (Positive range <>) of MyRecord;

...そしてテスト配列を定義します。そのサイズはたまたま10ですが、何でもかまいません。

   TheRecords : Record_Array (1 .. 10);

(このテストプログラムの)有効な結果はにのみ存在できますがTheRecords’Range、範囲外の値を追加して「見つかりません」を示しましょう。

   subtype Possible_Index is Natural range 0 .. TheRecords'Last;
   indexOfElement50  : Possible_Index := 0;  -- indicates 'not found'

OK!

begin

   -- set the values in TheRecords

   for i in TheRecords'Range loop
      TheRecords(i).firstItem  := i * 10;
      TheRecords(i).secondItem := i * 20;
   end loop;

   -- find which element of TheRecords has a
   -- firstItem with a value of 50

   for i in TheRecords'Range loop
      if TheRecords(i).firstItem = 50 then
         indexOfElement50 := i;
         exit;
      end if;
   end loop;

   Put_Line (indexOfElement50'Image); -- legal in Ada2012

end Main;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パラメータタイプのコンパイル時タイプ検出

分類Dev

パラメータタイプの比較

分類Dev

パラメータのSwiftComplexタイプ

分類Dev

ODataのデルタおよびタイプパラメータ

分類Dev

継承のデフォルトタイプパラメータ

分類Dev

タイプパラメータのオプションパラメータ?

分類Dev

パラメータの変数タイプの問題?- パワーシェル

分類Dev

型パラメーター宣言のシェイプレス分解タプル

分類Dev

KotlinGenericsタイプパラメーター

分類Dev

関数プロトタイプのconstパラメーター

分類Dev

Jenkinsパイプラインブールパラメータの評価

分類Dev

デフォルトのテンプレートタイプパラメータに依存する非タイプテンプレートパラメータ

分類Dev

Scala-メソッドタイプのパラメーター

分類Dev

jenkinsパイプラインの追加パラメーター

分類Dev

bashスクリプトへのddスタイルのパラメーター

分類Dev

OpenMP パラメータ スイープ パラレル

分類Dev

メインパラメータタイプの変更

分類Dev

ラムダパラメータータイプの明示的な指定

分類Dev

JavaGeneric取得タイプパラメータ

分類Dev

Javaマルチタイプメソッドパラメータ?

分類Dev

VSTSタスクグループのPowershellパラメーター

分類Dev

最初のパラメータタイプに基づくTypeScriptの2番目のパラメータタイプ

分類Dev

パラメータ付きのSpringプロトタイプBean?

分類Dev

パラメータ付きのSpringプロトタイプBean?

分類Dev

パラメータ付きのSpringプロトタイプBean?

分類Dev

ルートパラメータタイプ変換

分類Dev

WebStormのTypeScriptLint:コールバックパラメータタイプ

分類Dev

コールバックパラメータの条件付きタイプ

分類Dev

テーブルタイプパラメータの列名が無効です

Related 関連記事

  1. 1

    パラメータタイプのコンパイル時タイプ検出

  2. 2

    パラメータタイプの比較

  3. 3

    パラメータのSwiftComplexタイプ

  4. 4

    ODataのデルタおよびタイプパラメータ

  5. 5

    継承のデフォルトタイプパラメータ

  6. 6

    タイプパラメータのオプションパラメータ?

  7. 7

    パラメータの変数タイプの問題?- パワーシェル

  8. 8

    型パラメーター宣言のシェイプレス分解タプル

  9. 9

    KotlinGenericsタイプパラメーター

  10. 10

    関数プロトタイプのconstパラメーター

  11. 11

    Jenkinsパイプラインブールパラメータの評価

  12. 12

    デフォルトのテンプレートタイプパラメータに依存する非タイプテンプレートパラメータ

  13. 13

    Scala-メソッドタイプのパラメーター

  14. 14

    jenkinsパイプラインの追加パラメーター

  15. 15

    bashスクリプトへのddスタイルのパラメーター

  16. 16

    OpenMP パラメータ スイープ パラレル

  17. 17

    メインパラメータタイプの変更

  18. 18

    ラムダパラメータータイプの明示的な指定

  19. 19

    JavaGeneric取得タイプパラメータ

  20. 20

    Javaマルチタイプメソッドパラメータ?

  21. 21

    VSTSタスクグループのPowershellパラメーター

  22. 22

    最初のパラメータタイプに基づくTypeScriptの2番目のパラメータタイプ

  23. 23

    パラメータ付きのSpringプロトタイプBean?

  24. 24

    パラメータ付きのSpringプロトタイプBean?

  25. 25

    パラメータ付きのSpringプロトタイプBean?

  26. 26

    ルートパラメータタイプ変換

  27. 27

    WebStormのTypeScriptLint:コールバックパラメータタイプ

  28. 28

    コールバックパラメータの条件付きタイプ

  29. 29

    テーブルタイプパラメータの列名が無効です

ホットタグ

アーカイブ