我没有太多使用静态类型语言的经验(目前正在学习Scala,并且非常喜欢它!)但我注意到的一件事是,它们似乎从来没有像Ruby的method_missing或ColdFusion的onMissingMethod那样的东西。静态类型语言中是否存在一些固有的限制,从而阻止或使这一点变得困难?
发布于 2010-09-25 00:01:51
在静态类型语言中,成员函数是直接调用的。如果编译器不能确定要调用哪个成员函数,程序将不会编译。从这个意义上讲,方法调用是静态的。
在动态类型语言中,成员函数不是直接调用的。相反,调用代码会向对象发送一条消息,然后语言运行库会确定如何处理该消息。例如,运行库将扫描对象以查找同名的方法,然后扫描对象以查找名为method_missing的方法。从这个意义上讲,方法调用是动态的。
C# 4结合了静态类型和动态类型。变量的编译时类型可以是dynamic。对此变量的任何方法调用都将像在动态类型语言中一样进行处理。对具有静态类型的变量的任何方法调用都将像在静态类型语言中一样处理。
# 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();https://stackoverflow.com/questions/3788550
复制相似问题