DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: xkjdf02
今日帖子: 0
在线用户: 7
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 dark_show (DS) ★☆☆☆☆ -
盒子活跃会员
2018/1/19 17:18:13
标题:
请教大神们一个匿名函数作为参数传递的问题 浏览:687
加入我的收藏
楼主: // 把一个函数声明 定义为一个类型
typedef TSomeFunc function(str: string; val:Integer):boolean;

// 然后写了一个用这个类型作为参数的过程
procedure MyFunc(f: TSomeFunc);
begin
  if f('aaaa', 123) == true then
    ShowMessage('ok');
end;

然后这样调用:
procedure TYYY.Test();
begin
  MyFunc(
    function (str: string; val:Integer):boolean
    begin
      Result := False;
      if val == StrToInt(str)
        Result := True;
    end
  );
end;

// 就会编译不过 报 E2010 Incompatible types: 'TSomeFunc' and 'Procedure'

// 但是如果 把函数写在外面,然后传入函数名,就可以
// 比如先写成有名函数
function testSomeFunc(str: string; val:Integer):boolean;
begin
  Result := False;
  if val == StrToInt(str)
    Result := True;
end;

//然后这样调用 就完全没有问题
procedure TYYY.Test();
begin
  MyFunc(testSomeFunc);
end;

请问一下各位大神,如何直接传匿名函数呢?
----------------------------------------------
-
作者:
男 sdzzb (一刀) ▲▲▲▲▲ -
普通会员
2018/1/19 18:50:20
1楼: type
  TSomeFunc = reference to function(str: string; val:Integer):boolean
----------------------------------------------
-
作者:
男 dark_show (DS) ★☆☆☆☆ -
盒子活跃会员
2018/1/21 0:57:51
2楼: 谢谢,我试试
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行69.94629毫秒 RSS