问题标签 [default-arguments]

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

scala - Scala中的有界类型参数化案例类和默认参数的问题

考虑以下(使用 Scala 2.8.1 和 2.9.0 测试):

最后一行失败:

更改它以val dogMap = AnimalsMap[Dog](Map())修复它,但不再利用默认参数值。

鉴于 List 对应项按预期工作,为什么默认值被推断为 Map[Nothing,Nothing]?有没有办法创建一个使用maparg 的默认值的 AnimalsMap 实例?


编辑:我已经接受了对我更紧迫的第二个问题的回答,但我仍然想知道为什么Map()在这两种情况下推断的键类型不同:


编辑2:似乎类型界限是无关紧要的 - 案例类的任何参数类型都会导致问题:

0 投票
2 回答
1105 浏览

c++ - 如何在算法中使用带有默认参数的重载函数?

我知道常见问题的答案如何指定指向重载函数的指针?:无论是赋值还是强制转换,所有其他 C++ 教程都会将这样的字符串大写(give 或 take static_cast):

或者像这样:

它巧妙地选择<cctype>std::toupper.

但这引出了一个问题:如何<locale>以类似的方式选择重载?

或者,更实际地,考虑有人试图std::stoi在算法中使用 C++11 将字符串向量转换为整数向量:stoi有两个重载 ( string/ wstring),每个都采用两个额外的默认参数。

假设我不想显式绑定所有这些默认值,我相信如果不将此类调用包装在辅助函数或 lambda 中,就不可能做到这一点。是否有一个提升包装器或 TMP 魔法可以以完全通用的方式为我做这件事?一个包装器可以像call_as<char(char)>(fp2)或者更有可能call_as<int(const std::string&)>(std::stoi)被编写吗?

0 投票
1 回答
120 浏览

python - 参数的默认值

可能的重复:
Python 中的“Least Astonishment”:可变默认参数

考虑以下函数:

每次我调用 foo 时,它都会打印一个包含比上次更多元素的新列表,例如:

现在考虑以下函数:

多次调用时,我们得到如下图:

即它不会在每次调用时打印更大的值。

这种看似不一致的行为背后的原因是什么?
此外,如何证明第一个示例中的反直觉行为是合理的,为什么函数在调用之间保持状态?

0 投票
1 回答
218 浏览

c++ - 防止实例化未使用的默认函数参数

假设我有一个函数,它将函数指针作为参数,并且该参数有一个默认参数。

假设我想在我的 class 上使用 register Foo,但Foo没有默认构造函数,所以我default_construct不会使用它。显而易见的解决方案是执行以下操作:

但这不起作用。即使register<Foo>可能只在一个地方调用,并且它传递了一个要使用的函数,default_construct<Foo>仍然被编译器实例化,并且我得到编译器错误。似乎因为它从未被使用过,所以应该跳过它,但我想事实并非如此。

default_construct当它被用作默认参数时,有什么方法可以防止被实例化?我能想到的唯一解决方案是将它放在模板中,但似乎应该有更好的解决方案。

0 投票
5 回答
15735 浏览

php - PHP函数将默认值设置为对象

一个函数(实际上是另一个类的构造函数)需要一个对象class temp作为参数。所以我定义interface itemp并包含itemp $obj为函数参数。这很好,我必须将class temp对象传递给我的函数。但现在我想为这个itemp $obj参数设置默认值。我怎样才能做到这一点?

还是不可能?

测试代码澄清:

0 投票
1 回答
119 浏览

parameters - 有没有办法拥有动态默认参数?

我正在尝试创建一个类,用户可以在其中修改成员变量以更改其成员函数的默认参数。

到目前为止,我的解决方法是使用幻数,这显然并不理想。

有没有更好的方法,还是我坚持这个“黑客”解决方案?

0 投票
6 回答
37606 浏览

python - 如何将实例成员的默认参数值传递给方法?

我想使用实例属性的值将默认参数传递给实例方法:

尝试时,我收到以下错误消息:

我希望该方法的行为如下:

这里有什么问题,为什么这不起作用?我怎样才能做到这一点?

0 投票
4 回答
838 浏览

c++ - 我怎样才能清楚地指定我传递哪些参数以及哪些保持默认?

因此被问到C++ 中的默认参数

假设我有这样的功能:void f(int p1=1, int p2=2, int p3=3, int p4=4);

我想只使用一些参数来调用它——其余的将是默认值。

像这样的东西会起作用:

但是它需要太多的代码才能实用。

有一个更好的方法吗?

0 投票
2 回答
420 浏览

python - numpy 子类将不接受来自 python 继承类的 __new__ 参数

我创建了一个名为“Parray”的 ndarray 子类,它接受两个参数:p 和维度。它自己工作得很好。现在,我想创建一个名为 SirPlotsAlot 的类,它继承了 Parray 而没有所有花哨的newarray_finalize等。

我的程序中的对象通过来回传递对象 p = Parameters() 来共享参数集。

现在,当我输入(文件是辅助.py)时:

期望得到一个不错的“初始化具有初始维数 3 的 Parray”,我得到了“2”。但是如果我输入:

我明白了

它认为“p”是一个int,但它不是。如果我玩弄它,我会得到很多奇怪的看似无关的错误。它认为的 int 是“2”。我完全迷路了。

我尝试过使用和不使用 # (1) 注释(超级调用)。

其他错误包括“AttributeError: 'list' object has no attribute 'p'”、“TypeError: new () 需要 2 个参数(给定 1 个)”、“ValueError: need more than 0 values to unpack”(我用 *args替换了new的参数,我不太明白)。

0 投票
4 回答
1057 浏览

c++ - 为什么现有的函数参数不能用于评估其他默认参数?

我正在编写一个foo()以 2const char*作为参数的函数,pBegin并且pEnd. foo()传递一个以空字符结尾的字符串。默认情况下pEnd指向\0字符串的(最后一个字符)。

但是,我在上面的行中收到一个错误:

为什么编译器不允许这样的操作?潜在的问题是什么?