标签: optional-parameters

编译器抱怨我的默认参数?

我从这段代码中遇到了麻烦,在我从main.cpp文件中取出这个类并将其拆分为.h和.cpp后,编译器开始抱怨我在void中使用的默认参数.

/* PBASE.H */
    class pBase : public sf::Thread {
private:
    bool Running;

public:
    sf::Mutex Mutex;
    WORD OriginalColor;
    pBase(){
        Launch();
        Running = true;
        OriginalColor = 0x7;
    }
    void progressBar(int , int);
    bool key_pressed();
    void setColor( int );
    void setTitle( LPCWSTR );
    bool test_connection(){
        if(Running == false){
            return 0;
        }
        else{
            return 1;
        }
    return 0;
    }
    void Stop(){
        Running = false;
        if(Running == false) Wait();
    }
};
Run Code Online (Sandbox Code Playgroud)
    /* PBASE.CPP */

    // ... other stuff above

    void pBase::setColor( int _color = …
Run Code Online (Sandbox Code Playgroud)

c++ class optional-parameters

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

使用了哪个参数集?

我使用了高级参数处理来支持多个参数集.是否有任何预定义的变量或方法来确定哪个参数集用于调用脚本?

例如

if($parameterSet -eq "set1") { ... } elseif ($parameterSet -eq "set2") { ... }
Run Code Online (Sandbox Code Playgroud)

parameters powershell optional-parameters

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

在ES6中作为参数传递NULL时,在提供一个参数时不使用默认参数

是否有一个已知的原因,为什么在null提供一个参数时,作为ES6中的参数传入时不使用默认参数?

function sayHello(name = "World") {
    console.log("Hello, " + name + "!");
}

sayHello("Jim");     // Hello, Jim!
sayHello(undefined); // Hello, World!
sayHello(null);      // Hello, null!
Run Code Online (Sandbox Code Playgroud)

javascript optional-parameters ecmascript-6

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

带有可选参数的Groovy方法

我想为webservice编写一个包装器方法,该服务接受2个强制参数和3个可选参数.

为了有一个更短的例子,我想得到以下代码

def myMethod(pParm1='1', pParm2='2') {
    println "${pParm1}${pParm2}"
}

myMethod();
myMethod('a')
myMethod(pParm2:'a') // doesn't work as expected
myMethod('b','c')
Run Code Online (Sandbox Code Playgroud)

输出是:

12
a2
[pParm2:a]2
a2
bc
Run Code Online (Sandbox Code Playgroud)

我想要实现的是给出一个参数并得到1a结果.这是可能的(以最懒惰的方式)?

syntax groovy optional-parameters

45
推荐指数
3
解决办法
8万
查看次数

是Scala API中的选项和命名的默认参数,如石油和水吗?

我正在研究Scala API(顺便说一下,对于Twilio),其中操作具有相当多的参数,其中许多具有合理的默认值.为了减少输入并增加可用性,我决定使用带有命名和默认参数的case类.例如对于TwiML Gather动词:

case class Gather(finishOnKey: Char = '#', 
                  numDigits: Int = Integer.MAX_VALUE, // Infinite
                  callbackUrl: Option[String] = None, 
                  timeout: Int = 5
                  ) extends Verb
Run Code Online (Sandbox Code Playgroud)

这里感兴趣的参数是callbackUrl.它是唯一真正可选的参数,如果没有提供任何值,则不会应用任何值(这是完全合法的).

我已经宣布它是一个选项,以便在API的实现方面使用它来执行monadic map例程,但这给API用户带来了额外的负担:

Gather(numDigits = 4, callbackUrl = Some("http://xxx"))
// Should have been
Gather(numDigits = 4, callbackUrl = "http://xxx")

// Without the optional url, both cases are similar
Gather(numDigits = 4)
Run Code Online (Sandbox Code Playgroud)

据我所知,有两种选择(没有双关语)来解决这个问题.要么让API客户端导入隐式转换到范围:

implicit def string2Option(s: String) : Option[String] = Some(s)
Run Code Online (Sandbox Code Playgroud)

或者我可以使用null默认值重新声明case类,并将其转换为实现端的选项:

case class Gather(finishOnKey: Char = '#', 
                  numDigits: Int = …
Run Code Online (Sandbox Code Playgroud)

scala optional-parameters named-parameters

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

如何在C#中跳过可选参数?

例:

public int foo(int x, int optionalY = 1, int optionalZ = 2) { ... }
Run Code Online (Sandbox Code Playgroud)

我想这样称呼它:

int returnVal = foo(5,,8); 
Run Code Online (Sandbox Code Playgroud)

换句话说,我想提供xz,但我想使用默认值Y,optionalY = 1.

Visual Studio不喜欢 ,,

请帮忙.

c# optional-parameters

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

将默认参数值设置为默认构造函数的更好语法

有人可能想要使用参数声明一个函数,并指定参数的默认值是类型的默认构造函数的结果:

void foo(a::really::long::type::name arg = a::really::long::type::name());
Run Code Online (Sandbox Code Playgroud)

是否有更好的语法,不涉及输入类型名称两次?就像是:

void foo(a::really::long::type::name arg = default);
Run Code Online (Sandbox Code Playgroud)

我意识到我可以typedef使用类型名称使其更漂亮,但我很好奇是否存在这样的语法.

c++ optional-parameters default-constructor c++11

38
推荐指数
1
解决办法
2247
查看次数

Python函数中的可选参数及其默认值

可能重复:
Python中的"最小惊讶":可变默认参数

我对Python函数/方法中可选参数的工作原理感到困惑.

我有以下代码块:

>>> def F(a, b=[]):
...     b.append(a)
...     return b
...
>>> F(0)
[0]
>>> F(1)
[0, 1]
>>>
Run Code Online (Sandbox Code Playgroud)

为什么F(1)回归[0, 1]而不是[1]

我的意思是,里面发生了什么

python parameters parameter-passing optional-parameters

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

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

提供可选参数的现代 C++ 方法

让我们采用以下函数声明:

void print(SomeType const* i);
Run Code Online (Sandbox Code Playgroud)

在这里,const*参数的性质i暗示了意图,即参数是optional,因为它可能是nullptr。如果这不是故意的,那么参数将只是一个const&. 交流可选的语义当然不是设计指针的初衷,但使用它们来这样做恰好在很长一段时间内都能正常工作。

现在,由于在现代 C++ 中通常不鼓励使用原始指针(并且应该避免使用std::unique_ptrstd::shared_ptr精确指示特定的所有权 -语义),我想知道如何正确指示函数参数的可选 -语义而不传递值,即复制,作为

void print(std::optional<SomeType> i);
Run Code Online (Sandbox Code Playgroud)

会做。

考虑了一段时间后,我想出了使用的想法:

void print(std::optional<SomeType const&> i);
Run Code Online (Sandbox Code Playgroud)

这实际上是最准确的。但事实证明std::optional 不能有引用类型。¹

另外,使用

void print(std::optional<SomeType> const& i);
Run Code Online (Sandbox Code Playgroud)

决不会是最优的,从那时起,我们将要求我们SomeType在向存在std::optional主叫侧的,可能再次(或相当可能)需要复制那里

问题:那么在不复制的情况下允许可选参数的现代方法是什么?在这里使用原始指针在现代 C++ 中仍然是一种合理的方法吗?


¹:具有讽刺意味的是,所描述的为什么std::optional不能有引用类型的原因(关于重新绑定或转发赋值的争议)不适用于const引用的std::optionals的情况,因为它们不能被分配。

c++ pointers optional-parameters optional semantics

33
推荐指数
3
解决办法
2684
查看次数