CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

总是以为对函数名赋值后,函数立即返回,原来不是的,晕!

楼主lemon_wei(研究BT,做好P2P)2004-12-02 22:11:17 在 Delphi / VCL组件开发及应用 提问

以前总以为   result   可以多次赋值,运行到函数最后时退出,对函数名赋值后,函数立即退出,今晚捉虫时发现它和result是一样的,都运行到最后才返回,返回值为最后一次赋的那个值,要想提前返回必须加exit。很是晕,出了一身冷汗,想想以前写的都是result   +   exit返回的,要是直接对函数名赋值还以为它会提前返回,不知会有多少个虫...   (高手莫笑,我以前真是这么认为的)  
   
  function   aaa():integer;  
  var  
      i:integer;  
  begin  
      aaa   :=   10;  
      i   :=   1000;  
      aaa   :=   1000;  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      edit1.Text   :=   intTostr(aaa());     //   结果是1000,以前总以为它是10呢。  
  end;  
  问题点数:20、回复次数:23Top

1 楼ahjoe(强哥)回复于 2004-12-02 22:15:03 得分 2

我刚学那两年也是这么认为的。   :)Top

2 楼alec_ma(乐无边)回复于 2004-12-02 22:21:33 得分 1

没学过   :DTop

3 楼xzlinux(xz)回复于 2004-12-02 22:32:37 得分 1

你果然是高手啊  
  竟然会用result   +   exit这样的语句,  
  说实话,我是第一次看见,可能是我代码看得太少了吧。  
  最后想说的是,我也很希望Delphi的编译器会像你说的那样高级一点。Top

4 楼spng(航海士)回复于 2004-12-02 22:41:52 得分 1

upTop

5 楼imacih()回复于 2004-12-02 22:44:16 得分 1

呵呵,不建议对函数名赋值,给RESULT赋值使代码易维护。Top

6 楼CareYouOnly(只在乎你)回复于 2004-12-02 23:01:11 得分 1

我一开始以为result跟函数名一样是立刻返回的(就像C里的return)。Top

7 楼nyf1220(我是党员----不过听说最近风声紧,打算换名字)回复于 2004-12-02 23:11:39 得分 1

哈哈,基础书里都有讲的,Top

8 楼halfdream(哈欠)回复于 2004-12-03 00:34:40 得分 1

PASCAL   一般主张节制使用EXIT..  
  尽可能让一个函数能够单入单出.  
  Top

9 楼g961681(技术庸人(情商太低))回复于 2004-12-03 09:23:19 得分 1

用习惯了就可以了!Top

10 楼hellolongbin(一个人(自从扩充话题改版,再也不去灌水乐园了))回复于 2004-12-03 10:21:05 得分 1

俺从来不给函数名赋值的……Top

11 楼caven()回复于 2004-12-03 10:50:26 得分 1

我还不知道函数名可以赋值,我都是用result的   :)Top

12 楼flyforlove(吾将远去)回复于 2004-12-03 10:58:44 得分 1

学C留下的后遗症。Top

13 楼zijida(左八荣,右八耻,代表挂腰间,和谐贴胸前,人挡杀人,佛挡杀佛!)回复于 2004-12-03 12:55:22 得分 1

你看楼主大哥,人家就挺叼  
  代码写成这样,仍然运行良好  
  aaa不用声明,不用Result返回  
  居然能正常跑?!   呵呵,倒~Top

14 楼lemon_wei(研究BT,做好P2P)回复于 2004-12-03 12:57:48 得分 0

回复人:   xzlinux(xz)   (   )   信誉:100      
   
  你果然是高手啊  
  竟然会用result   +   exit这样的语句,  
  说实话,我是第一次看见,可能是我代码看得太少了吧。  
  最后想说的是,我也很希望Delphi的编译器会像你说的那样高级一点。  
  -----------------------------------------------------------------  
      哈哈,是我没说清楚,我是意思是result     exit   这两条语句组合起来用,并不是  
  说在代码中有   "result   +   exit   "这样的语句。  
  比如:  
      if   条件   then    
      begin  
            result   :=   100;  
            exit;  
      end;  
  Top

15 楼ysai(所有真的都是假的真,所有假的都是真的假)回复于 2004-12-03 13:03:56 得分 1

你看楼主大哥,人家就挺叼  
  代码写成这样,仍然运行良好  
  aaa不用声明,不用Result返回  
  居然能正常跑?!   呵呵,倒~  
  ---------------------------  
  aaa是函数名,当然不用声明  
  Result变量可能因为编译选项改变而不存在,不用Result返回也正常Top

16 楼lemon_wei(研究BT,做好P2P)回复于 2004-12-03 13:07:35 得分 0

回复人:   zijida(深水游鱼,吐泡泡被追殴)   (   )   信誉:99      
   
    你看楼主大哥,人家就挺叼  
    代码写成这样,仍然运行良好  
    aaa不用声明,不用Result返回  
    居然能正常跑?!   呵呵,倒~  
   
  --------------------------------------------------  
      1、你新建和工程,把我贴的那段代码加上去,再放个   TEdit   和   TButton   ,产生OnClick事件,看看到道能不能运行?难道   TEdit   的   Text   里面显示的不是   1000   吗?  
      2、本人贴这段代码,只是举个例子,说明一下给函数名赋值后函数并不会返回  
  Top

17 楼zeroxing(胸无半点墨,腰有万贯财;此般理想高,怎奈做不到!)回复于 2004-12-03 13:19:56 得分 1

楼主你惨了,我看到你以前的一个过程:  
   
  function   大王杀不杀:   boolean;  
  begin  
      if   大王.摇头   then  
          大王杀不杀   :=   false;  
       
      if   大王.点头   then  
          大王杀不杀   :=   true;  
  end;  
   
  begin  
      if   大王杀不杀   =   true   then  
          杀掉无名  
      else  
          放了无名;  
  end;  
   
  这下,无名死定了!  
  看来,以前楼主没有认真测试程序呀,要保证每个分支每个语句至少运行一遍,保证代码覆盖率呀。如果你那么作过,肯定早就发现自己的这个误解了.Top

18 楼zhmnsw(糖醋鼻子)回复于 2004-12-03 13:20:49 得分 1

幸好我习惯用RESULT+EXIT  
  汗ING。。。Top

19 楼zeroxing(胸无半点墨,腰有万贯财;此般理想高,怎奈做不到!)回复于 2004-12-03 13:21:42 得分 0

错了  
  你的大王杀不杀应该是这样,上面是我修改过了的版本:  
   
  function   大王杀不杀:   boolean;  
  begin  
      if   大王.摇头   then  
          大王杀不杀   :=   false;//以为这里就退出了?  
       
      大王杀不杀   :=   true;  
  end;  
  Top

20 楼postfxj(探索者)回复于 2004-12-03 14:23:36 得分 1

什麼習慣了就好了Top

21 楼lemon_wei(研究BT,做好P2P)回复于 2004-12-03 18:09:23 得分 0

回复人:   zeroxing(光头)   (   )   信誉:105      
     
    “我看到你以前的一个过程“  
          .    
          .  
          .  
  ----------------------------------------  
  哈哈,代码是要好好测试,"大王杀不杀"这个可不是我写的,你记错了吧。Top

22 楼g961681(技术庸人(情商太低))回复于 2004-12-03 21:07:34 得分 1

用多了,习惯了,就自然不会出错了。  
  不过还是计较建议使用  
  Result   +   Exit模式。Top

23 楼dakk(初学者)回复于 2004-12-03 21:27:37 得分 1

傻瓜了吧  
   
  C++是立刻退出,delphi不是Top

相关问题

  • C++中,函数的返回值作赋值表达式的左值时,有什么用处?
  • 赋值给函数,该怎么办
  • 如何给封装的函数赋值
  • 函数返回类型可以为array么?
  • 关于赋值函数和拷贝函数的问题!
  • 拷贝构造函数与赋值函数的具体作用
  • 函数返回值???
  • 拷贝构造函数和赋值构造函数的区别,不解之处。
  • 复制构造函数和赋值函数的问题。。。。求达人讲解。。。。
  • JSP页面要调用一个javabean函数 函数如何返回一个int数组 并赋值给jsp页面中定义的一个int数组(数组定长)

关键词

  • 函数
  • 代码
  • 语句
  • 无名
  • 信誉
  • delphi
  • 赋值
  • 大王
  • 返回
  • 函数名

得分解答快速导航

  • 帖主:lemon_wei
  • ahjoe
  • alec_ma
  • xzlinux
  • spng
  • imacih
  • CareYouOnly
  • nyf1220
  • halfdream
  • g961681
  • hellolongbin
  • caven
  • flyforlove
  • zijida
  • ysai
  • zeroxing
  • zhmnsw
  • postfxj
  • g961681
  • dakk

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo