数组做方法入口参数

在X++中数组类型做入口参数如下两点需要注意:
1.字符串数组中字符串必须是定长的.
2.如果方法不是内联的,必须定义为anytype.
举例如下:
1.int类型数组,内联方法
None.gif static   void  InputParameterTest(Args args)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
int intTest[2];
InBlock.gif    
//inline method
InBlock.gif
    void intArrayInputParameterTest(int inputParameter[])
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        print inputParameter[
1];
InBlock.gif        print inputParameter[
2];
InBlock.gif        pause;
ExpandedSubBlockEnd.gif    }

InBlock.gif    intTest[
1= 100;
InBlock.gif    intTest[
2= 200;
InBlock.gif    intArrayInputParameterTest(intTest);
ExpandedBlockEnd.gif   }
上述代码可以正确编译运行.
2.int类型数组,非内联方法
None.gif // 调用方法
None.gif
static   void  Main(Args args)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
int intTest[2];
InBlock.gif    ;
InBlock.gif    intTest[
1= 100;
InBlock.gif    intTest[
2= 200;
InBlock.gif    intArrayInputParameterTest(intTest);
InBlock.gif  InputParameterTest::intArrayInputParameterTest(intTest);
ExpandedBlockEnd.gif}

None.gif
// 被调用方法
None.gif
static   void  intArrayInputParameterTest( int  inputParameter[])
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif        print inputParameter[
1];
InBlock.gif        print inputParameter[
2];
InBlock.gif        pause;
ExpandedBlockEnd.gif}

上面的代码是不能通过编译的,必须把被调用方法的入参类型改成anytype数组才行.
3.string类型数组,内联函数
None.gif static   void  Main(Args args)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif     str strTest[
2];
InBlock.gif     
void strArrayInputParameterTest(str inputParameter[])
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        print inputParameter[
1];
InBlock.gif        print inputParameter[
2];
InBlock.gif        pause;
ExpandedSubBlockEnd.gif    }

InBlock.gif    ;
InBlock.gif   
InBlock.gif    strTest[
1= "First";
InBlock.gif    strTest[
2= "Second";
InBlock.gif    
//call inline method
InBlock.gif
    strArrayInputParameterTest(strTest);
ExpandedBlockEnd.gif }

上述代码不能通过编译,错误内容为:对该类型的数组进行了非法操作.
把strTest改成定长字符串类型就可以通过了.
None.gif static   void  Main(Args args)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif     str 
100 strTest[2];
InBlock.gif     
void strArrayInputParameterTest(str 100 inputParameter[])
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        print inputParameter[
1];
InBlock.gif        print inputParameter[
2];
InBlock.gif        pause;
ExpandedSubBlockEnd.gif    }

InBlock.gif    ;
InBlock.gif    strTest[
1= "First";
InBlock.gif    strTest[
2= "Second";
InBlock.gif     
//call inline method
InBlock.gif
    strArrayInputParameterTest(strTest);
InBlock.gif
ExpandedBlockEnd.gif   }

当然如果方法不是内联的,入参的类型也必须定义成anytype,字符串也必须是定长的.
从使用者的角度我想不出为什么要这样设计......

转载于:https://www.cnblogs.com/Farseer1215/archive/2006/10/16/530289.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值