标签: default-value

确定是否传递了命名参数

我想知道是否可以确定是否在Python中传递了具有默认值的函数参数.例如,dict.pop是如何工作的?

>>> {}.pop('test')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'pop(): dictionary is empty'
>>> {}.pop('test',None)
>>> {}.pop('test',3)
3
>>> {}.pop('test',NotImplemented)
NotImplemented
Run Code Online (Sandbox Code Playgroud)

pop方法如何确定第一次没有传递默认返回值?这是否只能在C中完成?

谢谢

python default-value named-parameters

14
推荐指数
2
解决办法
1万
查看次数

C#变量初始化问题

我是否初始化整数变量是否有任何区别:

int i = 0;
int i;
Run Code Online (Sandbox Code Playgroud)

编译器或CLR是否将此视为同一事物?IIRC,我认为他们都被视为同一件事,但我似乎无法找到这篇文章.

c# initialization default-value

14
推荐指数
2
解决办法
2万
查看次数

使用NA默认条目创建(和访问)稀疏矩阵

在了解了在R中使用稀疏矩阵选项之后,我想使用Matrix包从以下数据框创建稀疏矩阵,并使所有其他元素都是NA.

     s    r d
1 1089 3772 1
2 1109  190 1
3 1109 2460 1
4 1109 3071 2
5 1109 3618 1
6 1109   38 7
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用以下内容创建一个稀疏矩阵,像往常一样访问元素:

> library(Matrix)
> Y <- sparseMatrix(s,r,x=d)
> Y[1089,3772]
[1] 1
> Y[1,1]
[1] 0
Run Code Online (Sandbox Code Playgroud)

但如果我想将默认值设为NA,我尝试了以下内容:

  M <- Matrix(NA,max(s),max(r),sparse=TRUE)
  for (i in 1:nrow(X))
    M[s[i],r[i]] <- d[i]
Run Code Online (Sandbox Code Playgroud)

并得到了这个错误

Error in checkSlotAssignment(object, name, value) : 
  assignment of an object of class "numeric" is not valid for …
Run Code Online (Sandbox Code Playgroud)

r default-value sparse-matrix na

14
推荐指数
2
解决办法
2万
查看次数

如何为C++构造函数指定默认参数值?

我有一个构造函数声明:

MyConstuctor(int inDenominator, int inNumerator);
Run Code Online (Sandbox Code Playgroud)

和定义为

MyConstuctor::MyConstuctor(int inDenominator,
    int inNumerator, int inWholeNumber = 0)
{
    mNum = inNumerator;
    mDen = inDenominator;
    mWhole = inWholeNumber;
}
Run Code Online (Sandbox Code Playgroud)

但我希望有一个选项可以将整数作为第三个参数传递,具体取决于调用者对象.这是正确的方法.如果不是什么可以替代方式.

c++ default-value

14
推荐指数
1
解决办法
3万
查看次数

Scala:如何使用默认值初始化对象

我想用一个例子可以更好地解释这一点

我有以下案例类

case class Person(name: String = "no name", surname: String = "no surname")
Run Code Online (Sandbox Code Playgroud)

我想制作一个通用函数来填充它,例如,json消息,可能没有指定所有字段

我知道要使用默认值,简单的答案不是将它们传递给构造函数,但如果我有几个字段可能会或可能不会出现在json中,我应该使用一个巨大的切换句子覆盖每个可能的组合缺少参数.在这种情况下,读完json之后,我应该照顾姓名和姓氏,没有姓名,没有姓,也没有名字和姓氏......(哎呀,我希望自己明白了).

更确切地说,我正在尝试开发一个函数,允许我从followgin json值创建一个人,当缺少某些参数时使用默认值

{ "name": "john", "surname": "doe" }
{ "surname": "doe" }
{ "name": "john" }
{ }
Run Code Online (Sandbox Code Playgroud)

这就是为什么我正在寻找一种更通用的方法来处理这个问题.

(我将展示一些伪代码,以便了解我想要实现的目标)

我在考虑这样的事情:

val p = Person(name= "new person name", surname= Unit)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,姓氏应该获得默认值

或类似的东西

val p = Person( Map( "name" -> "new person name" ) _* )
Run Code Online (Sandbox Code Playgroud)

因此它也采用了surname的默认值

或者也许在构造函数中执行它,如果我检测到空值(或None),我可以分配默认值.

实际上,我试图避免重复默认值的定义.

无论如何,实现这样的事情最常用的方式是什么?

constructor scala default-value

14
推荐指数
1
解决办法
2万
查看次数

如何在Makefile中更改CC等变量的默认值

(GNU)make使用了几个变量,如:

  • CC - 默认情况下为C编译器 cc
  • CFLAGS - C编译器的标志,默认为空

我想在我的中指定一些我自己的默认值Makefile.在下面的示例中,我使用条件赋值运算符?=在运行时能够覆盖我的默认值make:

CFLAGS ?= CFLAGS_my_default
CC ?= CC_my_default

print:
    echo CC=$(CC) CFLAGS=$(CFLAGS)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不会改变CC变量的值,因为原始默认值保持不变.CFLAGS由我的赋值设置,因为变量最初是空的:

$ make print
echo CC=cc CFLAGS=CFLAGS_my_default
CC=cc CFLAGS=CFLAGS_my_default
Run Code Online (Sandbox Code Playgroud)

从环境变量覆盖按预期工作:

$ CC=CC_from_env CFLAGS=CFLAGS_from_env make print
echo CC=CC_from_env CFLAGS=CFLAGS_from_env
CC=CC_from_env CFLAGS=CFLAGS_from_env
Run Code Online (Sandbox Code Playgroud)

如何更改变量的默认值,并且仍然可以在调用时覆盖它们make

variables makefile default-value gnu-make

14
推荐指数
2
解决办法
8477
查看次数

为什么std :: array <int,10> x不是零初始化但是std :: array <int,10> x = std :: array <int,10>()似乎是?

我刚刚在这里这里询问了有关数组和值初始化的两个问题.但是使用这段代码,我迷路了:

#include <iostream>
#include <iomanip>
#include <array>

template <class T, class U = decltype(std::declval<T>().at(0))>
inline U f1(const unsigned int i)
{T x; return x.at(i);}

template <class T, class U = decltype(std::declval<T>().at(0))>
inline U f2(const unsigned int i)
{T x = T(); return x.at(i);}

int main()
{
    static const unsigned int n = 10;
    static const unsigned int w = 20;
    for (unsigned int i = 0; i < n; ++i) {
        std::cout<<std::setw(w)<<i;
        std::cout<<std::setw(w)<<f1<std::array<int, n>>(i);
        std::cout<<std::setw(w)<<f2<std::array<int, n>>(i); …
Run Code Online (Sandbox Code Playgroud)

c++ arrays initialization default-value c++11

14
推荐指数
1
解决办法
1万
查看次数

MySQL 5.5和5.6默认值

我想澄清MySQL 5.5和5.6中默认值的行为.可以说我们在MySQL 5.5服务器上有下表:

CREATE TABLE `test` (
`TestColumn` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=INNODB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

我可以毫无问题地运行以下查询:

INSERT INTO `test` VALUES (NULL);
Run Code Online (Sandbox Code Playgroud)

这会创建以下行:

 TestColumn
 2014-02-20 14:55:05
Run Code Online (Sandbox Code Playgroud)

现在如果我在MySQL 5.6服务器上重复相同的测试,插入失败:

Error Code: 1048
Column 'TestColumn' cannot be null
Run Code Online (Sandbox Code Playgroud)

我知道时间戳自动初始化在5.6(http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html)中有所改变,但我无法解决的是如何复制行为见5.6中的5.5.

不确定它是否重要但我们的5.6服务器将explicit_defaults_for_timestamp设置为ON.

理想情况下,我所追求的是解决方案,但如果有人有更好的理解,并且可以解释它也是有用的.

谢谢.

编辑:我们正在使用MySQL 5.6.13

mysql default-value

14
推荐指数
1
解决办法
3768
查看次数

调用C++函数时指定默认参数

假设我有这样的代码:

void f(int a = 0, int b = 0, int c = 0)
{
    //...Some Code...
}
Run Code Online (Sandbox Code Playgroud)

正如您可以在上面看到我的代码,参数a,b以及c默认参数值为0.现在看看我的主要功能如下:

int main()
{
   //Here are 4 ways of calling the above function:
   int a = 2;
   int b = 3;
   int c = -1;

   f(a, b, c);
   f(a, b);
   f(a); 
   f();
   //note the above parameters could be changed for the other variables
   //as well.
}
Run Code Online (Sandbox Code Playgroud)

现在我知道我不能只跳过一个参数,并让它具有默认值,因为该值将作为该位置的参数进行评估.我的意思是,我不能,比如说f(a,c),因为,c将被评估为b,这是我不想要的,特别是如果c是错误的类型.有没有一种方法让调用函数在C++中指定,在任何给定的位置使用函数的任何默认参数值,而不限于从最后一个参数向后转到无?是否有任何保留关键字来实现这一目标,或者至少是解决方法?我可以给出一个例子:

f(a, …
Run Code Online (Sandbox Code Playgroud)

c++ language-construct default-value c++11

14
推荐指数
3
解决办法
4561
查看次数

打字稿中的默认值和泛型

我想创建以下类:

class MyClass<T = {}> {
  constructor(private values: () => Promise<T> = () => Promise.resolve({})) {}
}
Run Code Online (Sandbox Code Playgroud)

当然,编译器会抱怨,因为类型T未知,因此无法为其分配空对象:

Type '() => Promise<{}>' is not assignable to type '() => Promise<T>'.
Run Code Online (Sandbox Code Playgroud)

但是我觉得每次创建一个MyClass具有默认T值的新对象时都给构造函数赋予默认方法是相当“脏”的。

你认为最好的写法是什么?

generics default-value typescript

14
推荐指数
1
解决办法
1万
查看次数