首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么阻止了静态类型语言拥有像Ruby的method_missing这样的东西?

是什么阻止了静态类型语言拥有像Ruby的method_missing这样的东西?
EN

Stack Overflow用户
提问于 2010-09-24 23:28:12
回答 5查看 817关注 0票数 12

我没有太多使用静态类型语言的经验(目前正在学习Scala,并且非常喜欢它!)但我注意到的一件事是,它们似乎从来没有像Ruby的method_missing或ColdFusion的onMissingMethod那样的东西。静态类型语言中是否存在一些固有的限制,从而阻止或使这一点变得困难?

EN

Stack Overflow用户

发布于 2010-09-25 00:01:51

在静态类型语言中,成员函数是直接调用的。如果编译器不能确定要调用哪个成员函数,程序将不会编译。从这个意义上讲,方法调用是静态的。

在动态类型语言中,成员函数不是直接调用的。相反,调用代码会向对象发送一条消息,然后语言运行库会确定如何处理该消息。例如,运行库将扫描对象以查找同名的方法,然后扫描对象以查找名为method_missing的方法。从这个意义上讲,方法调用是动态的。

C# 4结合了静态类型和动态类型。变量的编译时类型可以是dynamic。对此变量的任何方法调用都将像在动态类型语言中一样进行处理。对具有静态类型的变量的任何方法调用都将像在静态类型语言中一样处理。

代码语言:javascript
复制
# static invocation, bound at compile time by the compiler
var s = 6;
s.ToString();

# dynamic invocation, handled at runtime by the CLR
dynamic d = 6;
d.ToString();
票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3788550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档