问题标签 [default-parameters]

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 投票
3 回答
623 浏览

c++ - C++ 选择带有默认参数的“错误”重载方法

我有以下界面

这在一个类中完全实现,然后我将调用如下:

当我检查调用了哪个方法实现时,我看到第三次调用(GET foo)最终到达了最后一个实现:

其中“foo”被隐式转换为布尔值。当我使用显式 c-cast 对这样的字符串进行调用时,命中第二个实现(字符串、字符串、布尔值)的“SET”、“foo”、“bar”也同样重要

预期的方法被调用。

我正在使用带有 C++11 的 gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)。

0 投票
1 回答
2550 浏览

python - 如何使用静态方法作为策略设计模式的默认参数?

我想创建一个使用类似于此的策略设计模式的类:

这给出了错误:

替换strategy=C.default_concrete_strategystrategy=default_concrete_strategy将起作用,但默认情况下,策略实例变量将是静态方法对象而不是可调用方法。

如果我移除@staticmethod装饰器,它会起作用,但还有其他方法吗?我希望默认参数是自我记录的,以便其他人可以立即看到如何包含策略的示例。

另外,有没有更好的方法来公开策略而不是静态方法?我认为在这里实施完整的课程没有意义。

0 投票
1 回答
391 浏览

python-2.7 - Python 2.7:基于全局定义默认参数?

我正在编写一个实用程序,我希望在其中拥有改变函数运行方式的全局变量。默认情况下,我希望所有函数都遵循一种风格,但在某些情况下,我还希望能够强制函数操作的方式。

假设我有一个文件 Script_Defaults.py

在另一个 python 文件中,我有很多这样的函数:

我在这里面临的问题是默认参数仅在文件启动时加载一次。我希望能够设置USER_INPUTFalseTrue在程序运行期间。为了获得这种行为,我目前正在像这样使用它......

这似乎是很多不必要的代码,特别是如果我有很多条件,比如USER_INPUT,以及许多需要它们的函数。有没有更好的方法来获得这个功能,或者这是唯一的方法?

0 投票
2 回答
665 浏览

.net - 可选参数:“空”与“未提供”

有没有办法区分空值和根本没有提到的值?

例如,我希望客户端能够更新配置文件并且只影响请求中指定的值......即使是空/空值。

所以给定一个名称=“Sherlok”和出生日期=“1月6日”的个人资料:

有没有办法区分这两种情况下的生日参数,还是我需要求助于魔法值?

0 投票
1 回答
3289 浏览

default-parameters - 具有多个子句的命名函数的 Elixir 默认参数

我很难理解默认参数如何与命名函数中的多个子句交互。归结为,为什么以下代码段有效?

据我了解,编译器将其扩展为:

所以我希望会发生以下情况:

相反,它有效:

使用Elixir 0.12.4

0 投票
1 回答
217 浏览

c++ - 使用派生类实例作为默认参数值

我需要我的Base类的静态方法来获得 type 的默认参数值Derived。有没有办法在不使用重载的情况下实现这一点?(见这里)。

...给我一个关于不完整类型的使用的错误Derived。但是,我不能将 的定义Derived放在前面,problem_here因为它必须在其基类的定义之后定义Base

不幸的是,返回指针 frommake_derived不是一种选择。

重载problem_here是我到现在为止唯一想到的东西,但是由于“真实”problem_here方法需要 2 个(另外一个是 3 个)参数,并且它是库的一部分,这给了我......

..仅适用于两个参数情况。

有没有办法避免编写所有这些函数签名,同时仍然保持相同的性能(没有任何参数星座的不必要的复制/移动构造)和调用者站点上的相同行为?


我应该补充一点,有多个函数problem_here都需要访问受保护的构造函数Derived(以及它的许多兄弟姐妹的构造函数)。因此,使这些方法成为 Base 的静态成员的主要原因是能够friend class Base;在每个派生类中,而不是与每个函数交朋友。


重构告诉我,我可以将访问派生类的受保护构造函数的代码移动到单个工厂函数中。这样,我就可以将带有默认参数的函数移到外面Base并让工厂调用。现在我仍然需要为这些功能中的每一个加好友,但只需要一次(Base让他们访问工厂)。我可以通过将所有函数放入一个辅助类并使其成为朋友来规避这一点,但这对我来说似乎是一种黑客行为。

0 投票
1 回答
2272 浏览

c++ - 如何使用默认参数将函数传递给 std:: 线程?

所以我有 gcc 版本 4.8.1,g++ 版本 4.6.4,使用标志:-std=c++0x 和 -pthread。

我将问题简化为显示的代码,但仍然得到原始错误。

我在下面编译的内容,但是当我取消注释线程“二”的两行时,我收到代码下方显示的错误消息

我试图解析错误消息,但我仍然不知道发生了什么......

有什么建议或解决方案吗?提前致谢!

0 投票
0 回答
398 浏览

c++ - 未命名的命名空间和默认函数参数

我想知道,如何将未命名命名空间的 const 成员变量设置为默认函数参数,其中函数在命名命名空间中声明。好吧,我想这对我来说很难解释,这是我想做的一个例子:

这不联系...

我仍然可以在函数定义中编写默认参数,但这不是我想要的,因为调用者不会看到它,对吧?任何建议如何正确编码?

0 投票
2 回答
1314 浏览

scala - Scala中参数中函数的默认值

我正在学习和试验 Scala。我想实现一个具有泛型类型的函数,它将一个函数作为参数并提供该函数的默认实现。

现在,当我在没有泛型类型的情况下尝试它时,它可以工作:

这不会给出任何错误

但是当我尝试使用泛型类型时,

我得到错误:

错误是因为编译器不知道 B 类型是否可添加?因为当我只返回 v1 或 v2 而不是 v1 + v2 时,它可以工作..

如果是这样,如何指定给定的类型必须是 Numeric ?我尝试用 B 替换 B : Numeric 但仍然给出相同的错误

0 投票
1 回答
2166 浏览

c++ - 如何使用 std::vector> 作为默认参数

编辑2:

澄清:

这个问题源于一个实际上与默认参数本身无关的问题,而是复制和移动构造函数。我接受了实际回答问题的答案(因此,如果您因为问题标题而在这里,请阅读它)并将解释为什么它最初对我不起作用。

出了什么问题?

因此,如“编辑:”中所述,问题实际上相当简单:

对包含 a 的类的分配std::vector<std::unique_ptr<T>>将破坏 VisualStudio 2013 中的编译(未使用其他版本进行测试)并且错误消息非常神秘。

评论中的假设是 VC 编译器有一个错误并试图调用一个不存在的复制构造函数。

妈的,现在怎么办?

这个假设实际上是正确的,但不是在我最初理解的意义上。

实际上,VCC确实尝试调用 的移动构造函数MyClass,它确实隐式定义了它。但是,这就是问题所在,它没有正确定义它:

当显式定义移动构造MyClass(MyClass && a)函数时,我们实际上可以通过编写如下代码来模仿编译器的行为:

使用此代码会生成与使用隐式定义完全相同的错误消息,我想您可以立即看到这里出了什么问题:这个移动构造函数实际上试图调用 的复制构造函数foos_,这当然是不可能的,因为它反过来不能为其内容调用复制构造函数,因为这些类型std::unique_ptr由于明显的原因没有复制构造函数。

当改为使用此代码时,

一切都很好,因为现在std::vector调用了移动构造函数,因此调用了其内容的移动构造函数。

那么该怪谁呢?

可能性一:

它实际上是一个编译器错误,源于模板解析问题。

如果需要,编译器希望隐式定义一个移动构造函数,如果类定义中有不可复制的类型,并且如果在代码中对该类进行了赋值,它就会这样做。

如果满足这两个条件,它会继续定义移动构造函数,但现在似乎并不关心std::vector模板的实际类型,只关心类本身,它确实定义了一个副本constructor, so the VCC tries to use it, which fails because of the missing copy constructor in std::unique_ptr`。

或者,它只是完全跳过移动构造函数的定义并尝试使用复制构造函数,这会导致相同的错误。

可能性2:

Microsoft STL 实现中的一些可疑之处。这只是一个线索,我无法解释它是如何工作的,但无论如何,这对我来说似乎是一种可能性。

如何避免这种混乱?

很简单,定义你自己的移动构造函数,如上所示。


编辑:

似乎归结为一个特定问题,原始答案发布在下面。

在 Visual Studio (2013) 中,创建一个全新的 Win32 控制台应用程序,不要更改任何设置并将其设为您的 main .cpp

尝试编译它会导致以下错误(它肯定适用于 gcc!):


假设我有一个这样的构造函数:

通过这个简单的设置,一切都编译得很好。对该构造函数的调用MyClass(vector<unique_ptr<Foo>>);成功并按预期运行。但我想将其foos作为默认参数。

如何获得默认值foos

这就是我想出的:

但不幸的是,这不起作用。我不知道为什么,如果有人能对此有所了解,那就太好了。

接下来的两次尝试是解决方法,而不是实际的默认参数:

也不行。这两种方法都会导致来自编译器的错误消息和冗长的输出,其中最有趣的部分是:

c:\users\ username \source\repos\myProject\myProject\MyClass.h(47) :参见类模板实例化的参考

其中 47 是实际向量定义的行号MyClass

所以我的猜测是,这真的是关于我在初始化时犯了一个巨大的错误。

另外,我正在 VS2013 上编译。

整个错误: