資料引用與field symbols

2021-10-08 16:31:06 字數 2266 閱讀 5396

type ref to(以下簡稱:trt)和 field symbol(以下簡稱:fs)在 abap 中都有著類似指標的作用;

下面結合對比和例項來介紹下兩者的用法和區別之處。

先預定義型別ty_ym,內錶it_ym,工作區wa_ym,變數v_ym(char20)以供後面使用:

type ref to 和 field symbol 的定義都可以指定特定的型別或者結構,或者不指定。

type ref to 有兩種初始化的方法:

第一種是用 create data 動態開闢記憶體;

第二種是用 get reference of 指向已經存在的記憶體變數.

field symbol 的初始化,則只能指向已經存在的記憶體變數。

如果定義 ref 是指定特定的型別或者結構的,那麼 create data 時 type 可以省略。

無論定義時 ref 是否有特定的型別或者結構,create data 時必須指定特定的型別或者結構,不能是data這種泛型的。

在使用 field symbol 和 type ref to 前必須初始化,不然會發生 runtime error。

如果第一步定義時指定了特定的型別或者結構,那麼 field symbol 和 type ref to 都可以直接使用;

如果第一步定義時沒有指定型別或者結構,那麼 type ref to 必須 assign 到另外乙個 field symbol 裡間接使用。

1) 指定特定的型別時:

ref ->* = 'abc'.

='abc'.

2) 指定特定的結構時:

ref->*-col1 = 'abc'.  "簡寫是ref->col1

< fs >-col1 ='abc'.

3) 不指定特定的型別或者結構時:

注意事項:

一般來說為了使用方便,還是應該指定 field symbol 或者 type ref to 的型別或者結構,以便之後直接使用。

在使用 type ref to 時,如果是 type ref to data,那麼之後想使用這個 type ref to 時,依然會不可避免的用到 field symbol;

這樣**寫起來就很麻煩,還不如一開始就使用 field symbol 寫。

但像動態內錶這種事先不知道結構的場合,那麼只能使用 type ref to,再結合 field symbol;

如果直接使用 field symbol,那麼 field symbol 將無法參考某個已經存在的結構進行初始化。

第一步假如 type ref to data,後面的第二步初始化時依然要指定特定的結構,所以還不如第一步就指定結構。

建議只有在事先不知道結構時,才使用泛型定義。

所以要麼定義和初始化時都指定型別或者結構,要麼就是動態內錶或者結構都無法在事先指定;

像第一步 type ref to data 第二步 create data ref type ty_ym 不是好的做法。

type ref to 和 field symbol 在用法上目前發現的主要區別:

1) type ref to 可以動態開闢記憶體,在動態內錶時,可以等在程式執行時獲得結構後再開闢記憶體,並且賦值給某個 field symbol。

而光用 field symbol 是做不到的,因為 field symbol 的初始化需要「掛」在已知結構上。

2)type ref to 不像 field symbol 那樣有loop at it_tab assigning < fs >的寫法,ref->*不是指向內錶資料,

而是類似工作區指向某塊記憶體,所以更改資料後需要 modify 到內錶,如果不需要資料了要clear。

而 field symbol 則不需要考慮 modify 和 clear。

3)if < fs1 > = < fs2 > 是比較記憶體裡的值,相對應的是if ref1->* = ref2->*,而不能判斷比較 if ref1 = ref2 。

1 資料引用與匿名儲存

引用本身就是一種標量變數 引用變數,如 ra 或 rarray 就是一種普通的標量變數,因為我們使用 符號。變數變數可以是乙個整數,乙個字串或者乙個引用,而且還可以被重新任意的賦值為這些資料型別中的任一種 vsftp root perl 10 cat a1.pl my arr 111 my ref ...

C 引用與const引用

1 在實際的程式中,引用主要被用做函式的形式引數 通常將類物件傳遞給乙個函式.引用必須初始化.但是用物件的位址初始化引用是錯誤的,我們可以定義乙個指標引用.1int ival 1092 2 int re ival ok 3int re2 ival 錯誤 4int pi ival 5int pi2 p...

PERL 引用與解引用

perl 語言中的引用類似於c c 中的指標。標量 scalar 列表 list 雜湊 hash 函式 sub 檔案控制代碼 handle 都可以使用引用來標記。引用本身又是乙個標量。scal ref scal 標量引用 arr ref arr 列表引用 hash ref hashe 雜湊引用 ha...