问题标签 [shadowing]

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 投票
1 回答
636 浏览

c# - 如何防止阴影和促进给定的方法?

在 C++ 中,它是通过“使用”完成的,而在 C# 中呢?

如何提升foo.print,所以foo.printbar.print编译器的“级别”相同(bar当然)?

更新 1

最初我添加了一段关于阴影和覆盖之间常见混淆的段落,但后来我删除了它,因为我认为它会冒犯读者。

阴影就像跨越继承树的重载。阴影不是压倒一切的。

更新 2

foo.print解决重载方法时不再考虑后阴影print。提升foo.print会让它重新进入流程——所以当我调用bar_object.print("hello")该方法时,它foo.print会被调用。

0 投票
3 回答
188 浏览

java - 方法中的阴影变量

我正在阅读Java 6的认证书。并且有一个关于“阴影变量”的示例:

这是结果:

我的问题是:如果一开始,变量'number'是28。当我使用该方法时,它会将变量更改为99和420。但是......,当方法完成时,为什么变量'number'有值 99 而不是 28 ?我认为它将具有其原始价值(28)。

0 投票
6 回答
5277 浏览

java - Java中的变量和方法阴影

基本上我想知道为什么静态方法不能被实例方法遮蔽,(我知道为什么,它会在某些情况下导致歧义),而静态变量可以被实例变量遮蔽(它仅适用于子类)。

例子:

因此,如果我尝试在超类中声明int area(实例变量)以及static int area它会给出一个错误,但在子类中声明时它不会发生,即使static int area从子类中仍然可见。

尝试使用实例方法隐藏静态方法和尝试使用实例变量隐藏静态变量之间的行为究竟有什么区别。

提前致谢。

0 投票
1 回答
62 浏览

java - 子类中的成员阴影

考虑以下示例大纲:

我的问题是关于“AAA”行。这里的目标是避免每次引用从超类继承的上下文成员时都必须强制转换。换句话说,我宁愿

代替

每一次。

这种方法似乎有效,但我想知道它是否正确,或者这样做是否有任何问题。就我而言,这不会导致模棱两可,尽管我可以看到一般情况下它是如何产生的。

另外,我只是想确保我不是在这里创建一个新对象,而是让这些方法以context不同的方式解释引用成员。

我想另一种方法是重命名contextrawContext,这可能更可取。

提前致谢

0 投票
1 回答
424 浏览

jvm - Java继承了字段阴影和JVM?

该机制是如何通过继承隐藏/隐藏字段并稍后解决 JVM 规范的一部分?我知道它是Java 规范的一部分,可以在许多博客文章和 SO 问题中找到。但是,当我实际查看 JVM 规范中的字段解析时,“隐藏”或“阴影”这两个词并没有出现在JVM 规范的 pdf 中的任何位置。

我问这个是因为我正在编写自己的 JVM,并且发现这个字段阴影是字节码/VM 的属性,而不仅仅是 Java 编译器或 Java 语言的一部分。我想知道应该在 VM 级别实施的正确、权威的方式。当然,JVM 的一个(错误?)特性需要在某个地方正式记录这一重要的特性吗?

0 投票
1 回答
402 浏览

haskell - A型不等于Haskell(ghci解释器)中的A型?

GHCi 告诉我 typeA不是 type A。为什么?

0 投票
1 回答
111 浏览

erlang - Erlang 中第二条消息的进程崩溃

我在 Erlang 中实现了一个简单的汽车流程:

我可以让它空闲,但如果我连续两次调用空闲,它会中断:

为什么?

0 投票
1 回答
544 浏览

java - ActionPerformed 不起作用

这段代码有点问题。该actionPerformed方法不起作用。按钮knappStartSalgknappStartKunde,当我按下按钮时没有反应。

应该进口的都进口了。

将非常感谢任何帮助。

开学班。

运行 GUI 的主类。

0 投票
2 回答
168 浏览

c++ - 遮蔽参数 C++ 的有趣案例(if 块中没有遮蔽的参数)

我今天惊讶地发现以下代码是完全有效的(gcc 4.4.5):

我真的很惊讶。如果我必须接受它,那么我可以肯定地说它是有道理的,因为新变量在它自己的块内,所以外面的其余代码仍然可以访问参数,所以参数并没有真正被隐藏。但这对我来说仍然没有意义,为什么我们不将其设为无效语法?我认为允许这样做没有任何好处,事实上,我只需要深入研究由此引起的错误。这是一个很长的函数,我创建了自己的变量,却没有意识到它与参数同名,后来的一些代码行(相同的块)依赖于那个参数变量,现在它正在使用我的版本我一天中有一个小时。

我对编译器有非常肤浅的了解,所以有人可以向我解释这种行为背后的全部故事吗?作为比较,在这样的 Java 代码中是无效的(重复变量)。

0 投票
2 回答
16383 浏览

python - 如何隐藏 python 内置 pwd 模块

有一些 Python 代码可以在 Linux 下运行。它以如下方式使用 pwd 模块:

现在我们特别需要用测试覆盖这段代码,并且测试必须在 Windows 下运行。该程序本身旨在仅在 Linux 下运行。问题是 pwd 模块在 Windows 下不可用,因此即使使用 MagicMock 模拟了 pwd 函数的实现,被测代码也会因 ImportError 而失败。

解决这个问题的基本思路是在运行测试时隐藏 pwd 模块。因此,在运行测试时,存根将隐藏 pwd,而在运行主程序时,将使用原始(Unix)pwd。我们在测试 PYTHONPATH 中创建了这样的存根:

但它似乎没有隐藏 pwd 模块,在调试器中我们看到内置 pwd 已导入。我主要是一名Java开发人员,所以如果做事方式不是“pythonic”,我很抱歉。欢迎提出想法。