免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 论坛热点
打印 上一主题 下一主题

为什么有些语言有“运行时检查对象是否有某个方法”的功能,这个功能有必要么? [复制链接]

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
21 [报告]
发表于 2009-12-23 13:39 |只看该作者
原帖由 论坛热点 于 2009-12-22 17:20 发表
为什么有些语言有“运行时检查对象是否有某个方法”的功能,这个功能有必要么?什么时候需要这样的功能?


这算什么还应该能在运行时得到对象的各个成员的名字和它们在内存中的位置和大小。

论坛徽章:
0
22 [报告]
发表于 2009-12-23 13:59 |只看该作者
QUOTE:
原帖由 mvnvn 于 2009-12-23 09:27 发表
lz说的“运行时检查对象是否有某个方法”的功能是不是跟语言相关,是不是某些语言必须有这种功能?
同问,是这样么?

论坛徽章:
0
23 [报告]
发表于 2009-12-23 14:04 |只看该作者
没人回答?

论坛徽章:
0
24 [报告]
发表于 2009-12-23 14:19 |只看该作者
原帖由 mvnvn 于 2009-12-23 09:27 发表
lz说的“运行时检查对象是否有某个方法”的功能是不是跟语言相关,是不是某些语言必须有这种功能?

是的,python和C++必须有这个功能,不然有些其它功能不能实现

论坛徽章:
0
25 [报告]
发表于 2009-12-23 14:47 |只看该作者
原帖由 qwa9820 于 2009-12-23 14:19 发表

是的,python和C++必须有这个功能,不然有些其它功能不能实现

哦,C语言不需要有这个功能还能写操作系统,其它有这个功能的语言还不能写操作系统,看了这个功能不是必需的,有没有都无谓了

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
26 [报告]
发表于 2009-12-23 17:52 |只看该作者

回复 #25 登楼望月 的帖子

原帖由 登楼望月 于 2009-12-23 14:47 发表
哦,C语言不需要有这个功能还能写操作系统,其它有这个功能的语言还不能写操作系统,看了这个功能不是必需的,有没有都无谓了


终于有人回你了, 终于可以说出这句话了, 憋坏了吧

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
27 [报告]
发表于 2009-12-23 20:45 |只看该作者
原帖由 登楼望月 于 2009-12-23 14:47 发表

哦,C语言不需要有这个功能还能写操作系统,其它有这个功能的语言还不能写操作系统,看了这个功能不是必需的,有没有都无谓了


真正的大师可以直接用二进制机器码写程序,什么汇编呀, C 呀都不是必需的,有没有都无谓了。

论坛徽章:
0
28 [报告]
发表于 2009-12-24 09:19 |只看该作者
为了兼容。
比如:某个组件没有fun1这个功能,但升级后有了。
但有的用户还在使用旧的组件。这时调用这个功能就会出错。
微软的com组件都是这么实现的。

论坛徽章:
0
29 [报告]
发表于 2009-12-24 09:29 |只看该作者
原帖由 liuty2006 于 2009-12-24 09:19 发表
为了兼容。
比如:某个组件没有fun1这个功能,但升级后有了。
但有的用户还在使用旧的组件。这时调用这个功能就会出错。
微软的com组件都是这么实现的。

组件加新的功能,除非这个功能不会增添或改动接口,否则旧的程序想使用这个功能必须也要更新

论坛徽章:
0
30 [报告]
发表于 2009-12-24 09:53 |只看该作者
我主要写php,php中就有一个方法metho_exists(obj,methodName)检测某个类的实例是否存在。这给web开发带来了极大的便利性。下面举个简单的例子
<?php
//这是一个controller
class Test{
    function test1(){
      echo 'I am test';
    }
}
$o = new Test();
$a = isset($_GET['action'])?$_GET['action']:'';
if (!$a){
exit(0);
}
if (!method_exists($o,$a)){
exit(0);
}
$o->$a();
?>
这是我要增加一个方法,test2,那代码就变成
<?php
//这是一个controller
class Test{
    function test1(){
      echo 'I am test';
    }
    function test2(){
    }
}
$o = new Test();
$a = isset($_GET['action'])?$_GET['action']:'';
if (!$a){
exit(0);
}
if (!method_exists($o,$a)){
exit(0);
}
$o->$a();
?>

这样一个入口使得业务开发人员仅仅关注于业务代码的实现,而不用操心执行入口在哪儿了。
当然,实际的项目中会有一个统一的入口,就连类名也是url动态传过来的。这在web开发中叫做统一入口模式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP