问题标签 [name-collision]
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.
c++ - 如何在 C++ 中解决钻石问题?
我有以下测试程序
编译期间出现错误
即使我在这里使用虚拟继承。有什么解决办法吗?
c++ - 如何避免布尔值和返回它的方法之间的名称冲突
假设我有一个处理动画的类。这个类的内部是一个被调用的布尔值isLooped
和一个返回这个布尔值的函数。我的问题是,我能做些什么来避免调用函数和变量相同的东西?
我曾考虑为我的类变量添加一个前缀,但这意味着对我的整个代码库进行更改,这是我不希望的。
c++ - 调用非成员运算符重载
给定以下代码:
在 line#1
中,有一个编译器错误,因为jostream
有一个函数成员被调用operator<<
,因此在 line 中的调用#1
(里面的注释行jostream::operator<<
,而不是代码的第一行)试图jostream::operator<<
使用两个参数进行显式调用,这两个参数不存在.
是否有任何技巧可以强制调用具有冲突名称的非成员函数?(除了调用进行实际调用的外部函数)。此处调用显然不是解决方案,::operator<<
因为重载可能位于用户命名空间内,如示例所示。
(使用 gcc-7.2.0)
swift - Swift 4:如何访问“type(of:)”,编译器访问另一个方法
在 Xcode 9 中,编译器已经开始混合具有相同名称的方法。在 8.3.3 中,此代码仍然有效。
在 Cocoapod 类(A 类)中有一个名为“type”的方法和一个名为“type”的属性。我想访问标准的“type(of:)”方法,而不是 A 类的方法或属性,也称为“type”。这是我要使用的方法的文档:
https://developer.apple.com/documentation/swift/2885064-type
编译器给我一个红色错误“静态成员 'type' 不能用于类型 'Class A' 的实例。” 我尝试了 Metatype.type(of: ) 但编译器声称 Metatype 是“未解析的标识符”。
我如何告诉编译器我想使用 type(of: ) 而不是它指向的其他东西?有问题的代码如下:
php - 当它与当前命名空间中的类发生冲突时,是否允许从 PHP 中的不同命名空间导入(通过使用)一个类?
当使用use
to import/alias namespace into the current namespace in PHP - 是否允许导入当前命名空间中确实存在但当前文件中未使用的类的名称?
PHP 5.6 和 7.x 在这里似乎表现不同。不幸的是,我根本不知道它是否被允许。如果它被禁止,我希望我的 IDE 检测到这种冲突(因为代码可能随时再次中断),否则它是 5.6 版中的 PHP 错误。
查看最少的代码来了解这个想法:
src/Main/Bar.php:
src/ToBeImported/Bar.php
src/Main/Foo.php
索引.php
此代码将在 PHP 5.6 中中断,而在 7.1 中完美运行。错误信息是
如果您想实际运行代码,请参阅此 github 存储库!
我很幸运在部署之前检测到了这个错误,在我们的生产系统上找到它可能需要很长时间。我为我的 IDE 提交了一个错误报告,但它的优先级被降低了,说明它是
PHP 中特定版本的错误,现在已过时
我想知道这是不是真的,或者它只是 PHP 7 的一个实现细节来处理基于每个文件的导入,将来可能会更改(使代码再次中断)。
编辑:
我知道通过use Cumuru\MinimalExample\ToBeImported\Bar as ImportedBar;
.
我的问题是,如果类Cumuru\MinimalExample\Main\Bar
是最后创建的,而其他两个类都没有改变,会发生什么。那么类Foo
将是致命的 - 当且仅当类在加载类之前Cumuru\MinimalExample\Main\Bar
被实例化(在同一个请求/进程中)。Foo
r - R:更好的冲突()函数?
对于我当前的项目,我已经加载了base
和tidyverse
包以及大约 14 个包,我偶尔会担心我错过的潜在冲突中的错误。
我刚刚了解了这个conflicts()
功能,我认为它是为了解决这个问题。我发现我并不真正理解它的一些输出。例如,使用选项 detail = TRUE
:
这是否意味着有六个环境包含替代版本coerce
?如果是这样,这是所有的冲突,还是只有那些冲突名称在搜索路径上具有更高优先级的冲突?给出六次名称而没有关于这些冲突发生地点的相邻信息似乎没有帮助。
此外,我安装的一些软件包似乎存在大量冲突,这让我怀疑我是否正确解释了输出:rlang
57、81、103 。sryyr
BiocGenerics
最后,我希望有一个不同的组织,按照函数名称的字母顺序,每个名称后跟一个按搜索路径顺序排列的环境列表,因此您可以轻松检查特定函数的潜在冲突(因为该列表按字母顺序排列)并立即查看哪个版本的功能处于活动状态(因为环境按搜索路径顺序列出)。如果我正确解释它,我想我可以从这个列表中编写这样一个函数,但如果已经存在更好的函数,我宁愿不这样做。
ruby-on-rails - Rails:如何防止路由与静态和动态页面发生冲突?
我有以下路线:
/1用 id #1 加载我的记录。问题是我的路由与 Rails 默认静态页面(404、500 等)冲突。
如何在动态路由正常工作的情况下获得静态错误页面?
例如,如果可能的话,我不介意将我的静态页面移动到/errors/404之类的路线。
编辑 1:
重新打开 ActionDispatch::ShowExceptions 类并更改私有方法 render_exception 是一个非常hacky的解决方案:
配置/应用程序.rb:
我已更改request.path_info = "/#{status}"
为request.path_info = "/errors/#{status}"
.
我根本不喜欢这个解决方案。
python - Python 3 导入与内部“解析器”冲突
我正在编写我的编译器项目,但现在我遇到了 python 导入冲突。在 gen.py 中,我想导入一些代码生成函数,比如
经过一番调查,我了解到“解析器”是为 python 内部解析器保留的。但我无法更改目录名称“解析器”,因为它已在任何地方使用。
我该如何解决这个问题?
r - 处理故意的命名空间冲突
我正在编写一个同时导入(和使用)SparkR::sql
和dbplyr::sql
. 其他相关 问题涉及我随意的无意碰撞import
。
在我的NAMESPACE
我有:
这两个函数都在脚本中使用,并且意识到冲突,我肯定总是在包名称前面加上前缀:
尽管如此,我在构建/检查包时收到了导入替换警告:
警告:在加载 'my_pkg' 时将之前的导入 'dbplyr::sql' 替换为 'SparkR::sql'</p>
我在编写 R 扩展中看到的似乎如下:
如果一个包只需要另一个包中的几个对象,它可以
foo::f
在代码中使用完全限定的变量引用 [ ] 而不是正式导入...这比正式导入效率略低,也失去了记录所有依赖项的优势在NAMESPACE
文件中(但它们仍然需要记录在DESCRIPTION
文件中)。评估foo::f
将导致包foo
被加载,但不附加,如果它还没有加载——这可能是延迟加载很少使用的包的一个优势。
我是否正确,这个/最佳实践的要点是:
- 选择最常用的功能并将其添加到
importFrom
- 删除“不太频繁”的功能,
importFrom
但保留该包DESCRIPTION
- 只需将
::
(可能在前面require()
)用于“不太频繁”的功能
r - R:如何防止(或至少预期)基本 R 函数内部的代码与后来安装的包中的函数之间的名称冲突?
我tidyverse
加载了一个包 (),它重命名了基本 R 函数 ( filter
)。
我正在运行一个基本 R 函数 ( arima.sim
),它调用该filter
函数并从dplyr::filter.ts
.
我可以从复制代码arima.sim
并创建arima.sim2
,替换filter
为stats::filter
,这解决了问题。但:
该
dplyr
功能dplyr::filter.ts
有助于阅读:dplyr::filter.ts function (.data, ...) { bad_args(".data", "必须是数据源,不是 ts 对象,你想要
stats::filter()
吗?") }
除了加载时的警告之外,还有什么应该提醒我注意这个冲突的tidyverse
吗?filter
因为当我收到这些警告时,我不知道我会运行stats::arima.sim
.
为什么在之前的查找中没有
stats::arima.sim
找到?包名称空间不应该防止这种事情吗?filter
stats namespace
dplyr namespace
除了使用如上所述重新创建基本 R 函数
::
之外,我可以或应该做些什么来确保基本 R 函数可以找到在其定义中使用的其他基本 R 函数,而不是使用同名函数来自后来安装的软件包?