2011-02-11 5 views
3
  1. PICK/UniVerseデータベースで定数を宣言するにはどうすればいいですか?
  2. 定数参照によって 関数に引数を渡すにはどうすればよいですか?

UniVerseデータベースのためのIBMのマニュアルには定数に関する情報がありますが、特に何もありません。pick/UniVerseデータベースの定数

ことに注意してください。

は、コンパイル時に値を持つ文を代入した値の実際のconst性を提供しないため、ステートメント値

は私が探しているものではありませんDEFINE。

誰もその宣言方法を知っていますか?

ありがとうございました。

答えて

4

それは(のUniVerseの姉妹データベースとの両方をまとめU2と呼ばれる)UniDataのと同じステートメントである、である例えば:EQUEQUATE

EQU statement TO value

私はあなたがポイント2で何を意味するかは完全にはわかりませんが、私はそれを掘り下げます。デフォルトでは、すべてのパラメータは「参照渡し」ですが、const引数の形式はありません。それでも、関数/サブルーチンでは内部的にパラメータ値を変更することができますが、結果は呼び出し元のプログラム/関数/サブルーチンの等価物の値に影響しません。


サイドノート:あなたは(値渡し)サブルーチン/関数は、あなたが渡す実際の変数の値を変更しないことを確認したい場合は、一時変数に代入して、それを渡すことができますか、たとえば、かっこ

でそれを囲む:()が何

CALL MySub(PassByRef, (PassByValue))

は、参照によって一時コピーを渡すPassByValueの一時的なコピーを作成することです。これにより、変更の伝播が中止されますPassByValue

+1

ポイント1:EQU/EQUATEはプリプロセッサを使い、特定の変数をコンパイル時に指定の値に置き換えていると思います。 Nevertheles、私はUniVerseで定数を宣言する方法だと思います。ポイント2:これは素晴らしいです!それはまさに私が探していたものです!そして私は、私はC++のバックグラウンドを持っていると説明しておかなければなりません。ありがとう! –

+0

UniDataでは、コンパイル時に、オブジェクトコードの先頭に値のテーブルを作成します。これらの値を使用するバイトコードでは、その値のテーブル位置を参照します。私はUniVerseが似ていると思います。 –

1

私はEQUATE文を使用して定数を作成し、複数のプログラムで使用できるようにするには、それらを独自のレコードに配置し、$ INCLUDE文を使用して他のプログラムへの定義。すべての値はコンパイル時に確立されることに注意してください。

コンパイル時以外の時に設定される "定数"に関しては、タグを介して間接的に値を参照する(定数参照を渡す)場合、ほとんどのU2プログラマは何らかの制御レコードを使用します。ファイルシステムとU2のプログラミング言語はとても絡み合っているので、誰もこれについて二度考えていることはありません。私が使ったほとんどのシステムには、自由形式のレコード構造を持つ "SOMETHING.OR.OTHER.CTRL"のようなものが1つ以上あります。エディタは、 "INVENTORY.CONSTANTS"のような機能を記述するキーを使用して、制御ファイル内のレコードにデータを埋め込むために使用されます。

間接参照の場合、「定数」の名前が複数の値を持つ第1の属性と、複数の値を持つ「定数」の値を持つ第2のフィールドを持つレコードを設定します。このように:

INVENTORY.CONSTANTS: 

001: JOHN*PAUL*GEORGE*RINGO 
001: 100*57*83*19833 

(「*」は実際には値マークです)。

その後、プログラムは、次の操作を行います。

SUBROUTINE SAMPLE(CONSTANT.NAME) 
    . 
    . 
    . 
OPEN "","SOMETHING.OR.OTHER.CONTROL" TO CTRL.FILE ELSE BOMB 
READ CONST.REC FROM CTRL.FILE, "INVENTORY.CONTSTANTS" THEN 
    LOCATE CONSTANT.NAME IN CONST.REC<1> SETTING CONST.POS THEN 
    CONST.VALUE = CONST.REC<2,CONST.POS> 
    END ELSE 
    BOMB 
    END 
END ELSE 
    BOMB 
END 
2

それらがPick/Universeで使用される前に、あなたは、変数を定義する必要はありません。

EQU PI TO 3.14

は、ここでの主な違いは、一度コンパイル時に割り当てられていることを

PI = 3.14

、実行時間の使用でそれを割り当てるために使用するコンパイル時に定義された変数を割り当てるにはEQUATEを使用すると、変数を再割り当てすることはできませんが、実行時に割り当てることができます。したがって、コンパイル時のコンパイルは、通常は定数用にのみ予約されますが、実行時の代入は定数および標準変数値の両方に使用できます。

関連する問題