扫描互联网,我无法以简单的方式理解 - 术语呼叫网站(@dlr)。 我一直在阅读CallSite的here:
一个网站说
一本书说:调用方法的位置。
致电网站。这是DLR的那种原子 - 最小的一块 代码可以被视为一个单元。一个表达可能 包含很多呼叫站点,但行为是建立在 自然的方式,一次评估一个呼叫站点。其余的 讨论,我们一次只考虑一个呼叫站点。它的 有一个小的呼叫站点示例可供参考 to,所以这里是一个非常简单的,其中d当然是变量 输入动态
d.Foo(10);呼叫站点在代码中表示为 System.Runtime.CompilerServices.CallSite。
另一本书说:
抱歉,我不能看看这3个解释在哪里合并为一个简单的解释。编译器发出最终导致表达式树的代码 描述由DLR将要调用的呼叫站点管理的操作 在运行时绑定。呼叫站点基本上充当中介 在来电者和被叫者之间。
我很乐意得到一个简单的解释:
我可以解释一下我的妻子 - 电话网站是什么?
答案 0 :(得分:12)
第一个解释与dlr或动态类型无关:简单来说,调用站点是源代码中调用方法的位置(或站点)。
在实现动态类型时,有必要存储有关代码中包含的动态方法调用的信息,因此可以在运行时调用它们(dlr需要查找方法,解决重载等)。表示此信息的对象也应该被称为“呼叫站点”。
答案 1 :(得分:4)
好的,这就是我的看法。
对于这个例子,调用就像一个执行某些代码并返回的方法或函数。
对于静态语言运行时程序(C或CLR等),调用站点实际上是进行函数调用的地方。这是呼叫将在正常(非特殊)流程中返回的位置。由于这是一个静态程序,因此调用站点只是一个内存位置,被压入堆栈。
对于动态语言程序(Ruby,Python等),您调用的代码直到运行时才会计算出来。这意味着需要某种形式的逻辑来管理正确的函数调用过程,然后在调用后清理(如果需要)。 如果动态语言程序在.NET 4 上,则使用System.Runtime.CompilerServices.CallSite类型的dlr(动态语言运行时)对象完成。因此,调用将返回CallSite对象中的方法,然后返回到原始调用的位置。
所以答案是,这取决于你如何进行通话以及你正在使用的平台。