Tag: 动态语言

如何通过堆栈跟踪访问本地? (模仿动态范围)

背景 即使可以在运行时编译C#代码,也不可能在当前范围中包含和运行生成的代码。 相反,所有变量都必须作为显式参数传递。 与像Python这样的动态编程语言相比,人们永远无法真正复制eval的完整行为(如本例所示)。 x = 42 print(eval(“x + 1”)) # Prints 43 这个问题 所以我的问题是(无论它是否真的有用;))是否可以通过使用reflection来模拟.NET中的动态范围 。 由于.NET为我们提供了Diagnostics.StackTrace类,它允许我们检查调用方法,这个问题归结为以下几点:( 如何)可以可靠地访问调用方法的本地 ? 堆栈跟踪是否为我们提供了足够的信息来计算内存偏移量,或者托管代码中是否禁止这样做? 这样的代码是否有可能? void Foo() { int x = 42; Console.WriteLine(Bar()); } int Bar() { return (int)(DynamicScope.Resolve(“x”)); // Will access Foo’s x = 42 }

新的“动态”C#4.0关键字是否会弃用“var”关键字?

当C#4.0出来时,我们有动态关键字,如Anders Hejlsberg在这个优秀的演示文稿中所描述的那样(C#的发展速度超过了我能跟上的速度……我没有太多时间熟悉var关键字) 我还需要var关键字吗? var有什么可以做的……动态不能吗? var x = SomeFunctionThatIKnowReturnsSomeKindOfList(); // do something with x dynamic x = SomeFunctionThatIKnowReturnsSomeKindOfList(); // do something with x