在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...