问题标签 [name-clash]

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 回答
959 浏览

python - Python 导入名称冲突

当我有一个包test时,我习惯于从中导入另一个文件script

和图书馆:

只要我不需要任何名称与我的任何脚本对应的库,它就可以工作。发生这种情况时,将加载脚本,而不是库。有没有办法强制本地导入在我使用时使用文件的完整路径?还是有另一种方法来防止名称冲突,而不重命名脚本?

0 投票
2 回答
168 浏览

git - 10个十六进制数字git hash缩写就够了吗?

需要多少个可能的哈希值才能避免N项目之间的冲突?如果你回想生日悖论,答案就比这个小得多N

让我们把问题反过来:对于N=16^10可能的哈希值,它对应于 10 个十六进制数字的缩写 git 修订代码,有多少修订,修订哈希重合的概率上升到 50%?直接计算表明,如果您有 1234603 个修订版本,其中两个具有相同 10 位哈希的概率为 50%。

现在,在大型活动存储库中,一百万左右的修订并非闻所未闻。这里有人在你的工作中经历过 git hash 冲突吗?从理论上讲,这应该发生了。

0 投票
1 回答
1217 浏览

python - 子文件夹具有相同名称时,Airflow Packaged Dags(压缩)冲突

我们正在建立一个 Airflow 框架,多个数据科学家团队可以在其中协调他们的数据处理管道。我们开发了一个 Python 代码库来帮助他们实现 DAG,其中包括各种包和模块中的函数和类(也包括 Operator 子类)。

每个团队都会将自己的 DAG 与包中的函数和类一起打包在一个 ZIP 文件中。例如,第一个 ZIP 文件将包含

邮编1:

main_dag_teamA.py

子文件夹1:package1-with-generic-functions + init .py

子文件夹2:package2-with-generic-operators + init .py

另一个 ZIP 文件将包含

邮编2:

main_dag_teamB.py

子文件夹1:package1-with-generic-functions + init .py

子文件夹2:package2-with-generic-operators + init .py

请注意,在两个 ZIP 文件中,子文件夹 1 和子文件夹 2 通常完全相同,这意味着完全相同的文件具有相同的功能和类。但随着时间的推移,当新版本的包可用时,包内容将开始在 DAG 包中出现偏差。

通过这种设置,我们遇到了以下问题:当包/子文件夹的内容开始在 ZIP 中出现偏差时,Airflow 似乎不能很好地处理同名包。因为当我运行“airflow list_dags”时,它会显示如下错误:

文件“/data/share/airflow/dags/program1/program1.zip/program1.py”,第 1 行,在 > from subfolder1.functions1 import function1 ImportError: No module named 'subfolder1.functions1'

可以使用以下代码重现问题,其中两个小 DAG 与包 my_functions 一起位于其 ZIP 文件中,该包具有相同的名称,但内容不同。

DAG 包 ZIP 1:

程序1.py

my_functions/functions1.py:

DAG 包 ZIP 2:

程序2.py:

my_functions/functions2.py:

当我运行“airflow list_dags”时,使用这两个 ZIP 文件会显示错误:

文件“/data/share/airflow/dags/program1/program1.zip/program1.py”,第 1 行,从 subfolder1.functions1 导入 function1 ImportError: No module named 'subfolder1.functions1'

当 ZIP 中的子文件夹内容相同时,不会发生错误。

我的问题:如何防止 ZIP 中的子文件夹冲突?我真的很想拥有完全独立于代码的 DAG,并带有自己的软件包版本。

0 投票
0 回答
150 浏览

python - 在 Python 中安装包时避免名称冲突

从 PyPI 安装包时,您必须使用项目的名称,这与您将实际导入的顶级包的名称不同。一个明显的例子是pyserialserial,它们使用以下方式安装:

但两者都与以下内容一起使用:

如果您浏览该site-packages文件夹,您会看到内容是两个软件包的组合,当然,这些文件会被要安装的​​最新版本覆盖,从而产生不可预测的结果。

在 Python 中安装包时,有没有办法避免这种名称冲突?想象一下,您想同时使用 pyserial 和 serial,那么您将如何安装它们?

0 投票
1 回答
1032 浏览

c++ - C++ 多个库定义相同的类名

我正在开发一个项目,其中我有一个供应商库,例如vendor.h,对于我正在使用的特定 Arduino 兼容板,它定义class HTTPClient了与 Arduino 系统库的冲突HTTPClient.h,它也定义了class HTTPClient.

这两个类除了同名之外没有任何关系,而且 HTTP 客户端的供应商实现能力远不如 Arduino 系统库的实现,所以我更喜欢使用后者。但我不能省略包括前者,因为我需要相当多的vendor.h. 本质上,我在这里提出了问题,但与类而不是函数有关。我有两者的完整代码,但鉴于一个是系统库而另一个是供应商库,我不愿意分叉和编辑任何一个,因为如果其中任何一个被更新,这会增加大量的合并工作,所以我的偏好是找到一个不编辑任何标题的整洁解决方案。

我尝试了其他 SO 问题中发布的各种解决方案:

  • 我不想遗漏任何一个标题,因为我需要vendor.h很多东西并且需要HTTPClient.h客户端实现的功能
  • 标题中适当的命名空间可以解决问题,我宁愿避免编辑任何一个标题
  • 我尝试将 包装#include <HTTPClient.h>在我的命名空间中main.cpp,但这会导致链接错误,因为它不是仅标头库,因此标头和 cpp 不在同一个命名空间中
  • 我尝试了一个简单的包装器,如上面链接的 SO 问题中的函数所建议的那样,其中标头仅包含我的包装器类的前向声明,并且关联的 cpp 包含实际的类定义。这给出了一个编译器错误error: aggregate 'HTTP::Client client' has incomplete type and cannot be defined(下面这个尝试的代码示例)

主.cpp:

httpclientwrapper.h:

httpclientwrapper.cpp:

在那个例子中,我不能从头HTTPClient文件中的类定义中继承,因为这会将重复的类名重新引入我的主程序中的全局命名空间(因此,查看前向声明是否可以解决问题的尝试可能是错误的)。我怀疑我可以通过完全复制HTTPClient上面的包装类中的类定义而不是尝试使用继承来解决这个问题。然后我会将成员定义添加到我的包装器 cpp 中,它将调用传递给HTTPClient's 的成员。在我将整个HTTPClient定义重写(或更可能是复制/粘贴)HTTPClient.h到我自己的包装器中之前,我想知道是否有更好或更合适的方法来解决冲突?

谢谢你的帮助!

0 投票
1 回答
28 浏览

java - 尝试覆盖方法时发生名称冲突

这是我在这里的第一篇文章,但我需要帮助来弄清楚为什么我的子类不允许我覆盖父方法。
我的任务是创建一个具有某些功能的通用二叉搜索树。下一个任务是创建一个通用的 AVL 树,我决定从我的自定义二叉搜索树扩展它以重用代码,并简单地添加使其功能所需的旋转。
但是,当尝试覆盖该方法时,我不断收到名称冲突错误。如果我在我的 AVLTree 类中去掉 Comparable 接口扩展并使我的插入方法通用,我会收到一个参数不匹配错误,说 T 无法转换为 Comparable。
这就是我坚持的地方,如果有人可以提供任何类型的输入,将不胜感激。

第一次尝试:

第二次尝试:

覆盖插入方法的错误

0 投票
0 回答
94 浏览

rust - 如何处理导出具有相同名称的符号的板条箱

我想同时使用它们just-argon2sodiumoxide它们分别与Argon2libsodium绑定。第一个用于密码散列,第二个用于加密等等。

但是,由于 libsodium 本身也包含 Argon2 代码,因此在构建时出现以下链接器错误:

两个库都导出了blake2b_*Argon2 实现使用的相同符号,因此名称冲突。

现在您可能想知道:为什么不直接使用 libsodium pwhashAPI,它在内部使用 Argon2(因此出现链接器错误)?因为我想使用 libsodium 未公开的并行 Argon2,因为它将并行度硬编码为 1

显然,这些blake2b_*符号 标记ARGON2_LOCAL,所以它们不是 export,但我想这并不重要,因为它们仍然存在于链接器中。

一种解决方案可能是使用 Argon2 的纯 Rust 实现,例如rust-argon2,但我测试了一个,不幸的是它慢了很多。

我怎样才能同时使用这两个库?我是否必须仅使用just-argon2并导出板条箱提供的功能just-argon2或类似的东西来制作一个单独的库板条箱,或者那不起作用/有更好的方法吗?编辑:这不起作用。

最小非编译程序:

在编写这个程序时,我注意到当我交换use语句时它编译得很好,但它在运行时崩溃:

这会因STATUS_STACK_BUFFER_OVERRUNWindows 异常__fastfail(FAST_FAIL_STACK_COOKIE_CHECK_FAILURE)(显然不同的出口冲突还是什么?

顺便说一句:我对 Rust 很陌生,所以可以肯定地说我不知道​​它的所有来龙去脉。