这种情况下,该怎么做?

allen12345 2012-12-09 12:10:05
我有很多个函数,函数命名很有规律,如func1,func2,func3........;现在我想依据某个参数,分别调用不同的函数,比如传入1,就调用func1,传入2就调用func2, 代码如下:
procedure DO(i:integer)
begin
case i of
1:func1;
2:func2;
3:func3;
.........
end;

如果func函数很多的话,,case就要把i的值统统都罗列出来,有没有比较简洁的方法?
...全文
201 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongss 2012-12-10
  • 打赏
  • 举报
回复
占楼学习一下
jAmEs_ 2012-12-10
  • 打赏
  • 举报
回复
引用 2 楼 s11ss 的回复:
Delphi/Pascal code?1234567891011121314151617181920212223242526272829303132333435363738394041procedure fun1;begin showmessage('1');end; procedure fun2;begin showmessage('2');end; procedu……
想到这个,可惜来晚
hsfzxjy 2012-12-09
  • 打赏
  • 举报
回复
不错的方法。。
haitao 2012-12-09
  • 打赏
  • 举报
回复
函数本身也可以直接作为参数传给另一个函数使用
simonhehe 2012-12-09
  • 打赏
  • 举报
回复
通过这种方法调用的方法数量不多的话 1,2楼的方法就行 如果数量多可以写个通用函数: 通过rtti单元获取方法列表, 通过与输入字符匹配获得适用的方法
taste品味 2012-12-09
  • 打赏
  • 举报
回复
向两位牛人学习,增见识了
wztimes 2012-12-09
  • 打赏
  • 举报
回复
在 case  of 中直接执行就好了, 莫非在case中无法完成的事??
fox600123 2012-12-09
  • 打赏
  • 举报
回复
楼上两位都是牛人,学习了!
s11ss 2012-12-09
  • 打赏
  • 举报
回复
procedure fun1;
begin
  showmessage('1');
end;

procedure fun2;
begin
  showmessage('2');
end;

procedure fun3;
begin
  showmessage('3');
end;

var
  l: TList;

procedure DOIt(i:integer);
begin
  TProcedure(l[i-1])
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  l:=TList.Create;
  l.Add(@fun1);
  l.Add(@fun2);
  l.Add(@fun3);

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  l.Free;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
  DoIt(2);
end;
pathletboy 2012-12-09
  • 打赏
  • 举报
回复
建数组
procedure x1;
begin
  ShowMessage('1');
end;

procedure x2;
begin
  ShowMessage('2');
end;

var
  x: array [0..1] of procedure = (x1,x2);

procedure DO(i:integer)
begin
  x[i];
end;
越界问题自己判断。

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧