问题标签 [static-binding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
45 浏览

php - 如何通过静态方法在其父类中使用来自子类的静态变量

我想获取在子类中重新声明的静态变量的值:

我想得到 CHILD_ECHO。

谢谢,莫滕曼

0 投票
6 回答
28898 浏览

java - 静态绑定和动态绑定

我真的对动态绑定和静态绑定感到困惑。我读过在编译时确定对象的类型称为静态绑定,在运行时确定对象的类型称为动态绑定。

下面的代码会发生什么:

静态绑定还是动态绑定?
这表明了什么样的多态性?

0 投票
1 回答
123 浏览

c# - 从方法接收匿名类型,在编译时知道它的成员

我知道有很多关于 C# 匿名类型的问题,但没有一个回答我。我也知道您可以返回匿名类型,或者将方法的结果分配给一个dynamic对象,或者按照 Jon Skeet 的这篇文章所述将其强制转换,但在这两种情况下,您都需要知道哪些是匿名对象的成员,那么为什么难道我们不能有一种名为的关键字anonymous,它允许我们做这样的事情:

然后像这样使用它:

但是有静态类型?我的意思是,为什么编译器不能静态知道哪些是匿名对象F方法返回的成员,所以给我智能感知?

0 投票
2 回答
118 浏览

c++ - C ++中的矢量容器和静态绑定?

有人可以解释为什么i->value()(i + 1)->value()打印 1 和 3 而不是 1 和 4 x[0]->value() << x[1]->value()

谢谢

0 投票
1 回答
74 浏览

java - 什么时候在Java中调用对象类型而不是对象的方法,尤其是在静态绑定中?

我的问题可能不是很清楚。通过这个例子,我可以进一步解释。当我阅读为此Static vs Dynamic Binding Logic发布的答案时,我得到了这个问题。

有两个版本的代码,两者完全一样,除了参数类型的变化Class B p (double i)

我的问题如下:为什么p(int)在第一个版本中调用 A 类,而p(double)在第二个版本中调用 B 类。

当我声明时B c;,我初始化类型为的引用变量B

接下来我将 c 分配给新对象,通过c = new A();

因此,这个声明B c = new A();创建了一个类 A 的实例并分配给 B 类型的变量。现在,每当在 c 上执行方法调用时,编译器首先检查方法是否存在于 B 中(因为它是 B 类型),但实际被调用的方法属于对象(它是一个 A 实例)。为什么在上面的例子中没有看到这种行为?或者如果我的推理是错误的,请纠正我。

谢谢

0 投票
9 回答
176627 浏览

java - 静态与。Java中的动态绑定

我目前正在为我的一个类做作业,在其中,我必须使用 Java 语法给出静态动态绑定的示例。

我了解基本概念,即静态绑定发生在编译时,动态绑定发生在运行时,但我无法弄清楚它们具体是如何工作的。

我在网上找到了一个静态绑定的例子,它给出了这个例子:

这会打印“动物正在吃东西”,因为调用callEat使用静态绑定,但我不确定为什么这被认为是静态绑定。

到目前为止,我所见过的任何资料都无法以我可以理解的方式解释这一点。

0 投票
1 回答
637 浏览

python - 为什么静态绑定对类和函数的工作方式不同?

在 python(在 2.7.6 上测试)中,所有变量在编译时都静态绑定到作用域。这个过程在http://www.python.org/dev/peps/pep-0227/http://docs.python.org/2.7/reference/executionmodel.html中有很好的描述

明确指出“如果名称绑定操作发生在代码块内的任何位置,则块内名称的所有使用都被视为对当前块的引用。”

函数是一个代码块,因此下面的代码失败,因为x 是在使用后分配的(因此在编译时它被定义为本地,因为它是在函数中的某处分配的,但在执行时,它是在绑定之前使用的)。

一个类也是一个代码块,所以我们应该观察到完全相同的行为。但这不是我观察到的。看这个例子:

由于类定义是一个代码块,因此该块内的任何赋值都应该使变量成为局部变量。所以x应该是类的本地C,所以y = x + 10应该产生一个UnboundLocalError. 为什么没有这样的错误?

0 投票
2 回答
632 浏览

java - Java 静态和动态绑定、向上转换、重载混合在一起

假设我们有以下代码

基本上,在 TestEqual 类(当然,扩展 Object)中,我们有一个从 Object 重载 equals 方法的方法。

此外,我们还有一些变量:Object t1、t2 实例化为 TestEqual、TestEqual t3 实例化为 TestEqual 和 Object o1 实例化为 Object。

如果我们运行程序,这将是输出。

这个例子似乎比通常的 Car c = new Vehicle(); 复杂一些。c.驱动器();因为我们调用方法的对象实例化与其类型不同,而且方法的参数实例化与其类型不同。

我想检查我是否正确理解了当我们调用每个方法时会发生什么,逐步关于绑定。

t1 被视为一个 TestEqual 对象。方法equals被重载,所以绑定是静态的,这意味着我们将t2作为一个Object传递,所以它会调用继承自Object超类的equals方法,所以它不会显示任何文本。

这似乎有点奇怪。我本来希望显示“In equals from TestEqual”,因为 t3 是一个 TestEqual 对象,所以应该调用来自 t1 的 equals。我在这里的解释是 t1 是静态绑定的并且被视为一个对象,因此调用从 Object 类继承的方法 equals ,参数 TestEqual t3 被向上转换为 Object。但这是否意味着 t1.equals(t2) 的先前解释是错误的?

t3 是一个TestEqual 对象,参数o1 是一个Object,所以调用了继承自Object 的equals 方法,所以什么也不打印。

t3 是一个TestEqual 对象,参数是一个TestEqual 对象,所以TestEqual 中的重载方法会被调用,打印“In equals from TestEqual”。

t3是一个TestEqual对象,由于静态绑定(方法重载),参数是一个Object,所以调用继承自Object的equal方法,什么也不打印。

0 投票
3 回答
611 浏览

programming-languages - 解释语言与编译语言中的动态绑定

因此,目前正在阅读有关绑定的内容...根据我能想到的示例以及在网络上找到的示例,动态绑定似乎主要发生在解释语言中,而不是发生在编译语言中。在 Java 中也会出现一些情况,但 java 不是一种“纯粹的”编译语言。我读过 - http://en.wikipedia.org/wiki/Dynamic_binding_(computing)

那么我的问题是——对于类、方法和对象,动态绑定是否首先发生在对象级别,然后追溯到方法、类等?此外,是否存在动态绑定发生在编译语言中的对象级别的实例?

0 投票
0 回答
272 浏览

dynamic-binding - 静态绑定和动态绑定的区别——相互递归

我有这段类似帕斯卡的代码:

我想弄清楚如果:

  1. 该语言支持静态绑定
  2. 该语言支持动态绑定

对于第一种情况,我认为它会是:“一一二三” 对于后一种情况,实际上,我不确定。

我知道静态绑定意味着实体(在我们的例子中 - const“str”)在编译期间被绑定/定义,最后调用哪个函数并不重要,这意味着它可以通过阅读函数代码来推断。我也知道动态绑定意味着实体(即“str”)依赖于调用堆栈进行绑定。相互递归让我有点困惑。那么我应该从每种情况下得到什么输出,为什么?