*---传值与传引用
1.Call By Value:
data: sum type i value 1,
num1 type i value 5.
*---阶乘
perform factorial using num1 changing sum.
write: / num1, sum.
form factorial using value(p_num1) changing p_sum.
while p_num1 > 1.
p_sum = p_sum * p_num1.
p_num1 = p_num1 - 1.
endwhile.
endform. "factorial
2.Call By Reference:
data: sum type i value 1,
num1 type i value 5.
*---阶乘
perform factorial using num1 changing sum.
write: / num1, sum.
form factorial using p_num1 changing p_sum.
while p_num1 > 1.
p_sum = p_sum * p_num1.
p_num1 = p_num1 - 1.
endwhile.
endform. "factorial
3.Call By Value and Return Result "传入参数值的方式同Call By Value, 但在子程序结束执行时会将传入的参数值复制一份传回给实参
data: sum type i VALUE 0,
num1 type i VALUE 100,
num2 type i VALUE 200.
*---加法
perform add using num1 num2 changing sum.
write: / num1, num2, sum.
form add using p_num1 p_num2 changing value(p_sum)." 此处用Value() 与不用不一样滴。。
p_sum = num1 + num2.
write: / num1, num2, p_sum.
endform. "ADD
*---子程序参数问题
子程序的using参数,如果参数是结构类型的,必须声明结构类型。如:
form frm_call_trigger using p_wmara type mara
p_stext type short_desc.
endform.
form frm_process_data tables t_001 structure struc01.
endform. "frm_process_data
若参数中有tables ,也有using,则tables 放在前面。
子程序带range参数
data: begin of gt_01 occurs 0,
sno(2),
sname(20),
end of gt_01.
ranges: r_sno for gt_01-sno.
r_sno-sign = 'I'.
r_sno-option = 'EQ'.
r_sno-low = '01'.
append r_sno.
r_sno-sign = 'I'.
r_sno-option = 'EQ'.
r_sno-low = '02'.
append r_sno.
perform frm_01 tables r_sno[].
*&---------------------------------------------------------------------*
*& Form frm_01
*&---------------------------------------------------------------------*
form frm_01 tables p_sno .
data len type i.
describe table p_sno[] lines len.
endform. "frm_01
评论