在ABAP 4中引數的傳遞

2021-09-01 07:25:54 字數 1749 閱讀 5477

在abap/4中引數的傳遞可分成 三種,位址傳輸、值傳輸、有返回值的值傳輸

1. call by reference:

傳引數時將資料的存放位址(address)傳至引數中, 也就是子程式中的引數變數與外部實際

變數共享位址內的值, 又稱為 call by address, 若在子程式中位址中的值改變了, 外部實

際變數的值也會跟著改變.

語法:form [using …] [changing …]

perform [using …] [changing …]

using 之後接在子程式中不會改變的變數, changing接會改變值的變數

但實際上using之後的引數在子程式中也可將值改變

example:

sum = 0.

num1 = 100. num2=200.

perform add using num1 num2 changing sum.

write: / num1,num2,sum 「 sum 由 0 變成 300

form add using num1 num2 changing sum.

sum = num1 + num2.

endform.

執行結果:

100 200 300

2. call by value

傳引數時將資料的值複製乙份至另一位址中, 所以在子程式中引數變數值改變, 並不會影

響外部實際變數的值.

語法:form using value(…)

使用 value()表示 是 call by value的傳遞

perform using

example:

sum = 0.

num1 = 5.

perform multi using num1 changing sum.

write: / num1,sum 「num1值還是5, sum 由 0 變成 120

form multi using value(num1) changing sum.

sum = 1.

while num1 > 1

sum = sum * num1.

num1 = num1 – 1.

endwhile..

endform.

執行結果:

5 120

3. call by value and return result

傳入引數值的方式同call by value, 但在子程式結束執行時會將傳入的引數值複製

乙份傳回給外部實際變數.

語法:form ….. changing value()

perform …. changing ….

example:

sum = 0.

num1 = 100. num2=200.

perform add using num1 num2 changing sum.

write: / num1,num2,sum 「 sum 由 0 變成 300

form add using num1 num2 changing value(s).

s = num1 + num2.

write: / num1,num2,sum 「得到結果為 100 200 0

endform.

執行結果:

100 200 0 「在子程式中 sum值尚未改變

100 200 300 「返回程式時, 將變數 s的值複製給 sum

「所以 sum值變成 300

在URL中傳遞中文引數時傳遞失敗的解決方案

問題描述 使用標籤的herf來傳遞頁面的引數時,英文正常,中文失敗 原因分析 使用tomcat在url中傳遞引數,是通過http報頭來傳遞的,與表單傳遞不同,表單中傳遞的引數是在http中的body中傳送的,字元過濾器只能起到過濾http中body中的引數,不能過濾head傳遞的引數,而tomcat...

Nim 中的引數傳遞

在 nim 中過程或方法有兩種引數型別,一種是前面有 var 關鍵字 的引數,另一種是不帶 var 的引數。例如 proc divmod a,b int res,remainder var int res a div b remainder a mod b var x,y int divmod 8,...

WebApi中的引數傳遞

webapi引數傳遞總結 在webapi中,請求主體 httpcontent 只能被讀取一次,不被快取,只能向前讀取的流。舉例子說明 服務端方法 void action int id,string name 所有引數都是簡單型別,因而都將來自url 服務端方法 void action fromuri...