标签: default-parameters

Scala额外的无参数构造函数以及默认构造函数参数

我在构造函数上使用Scala 2.8默认参数,出于Java兼容性原因,我想要一个使用默认参数的无参数构造函数.

这不是出于非常明智的原因:

class MyClass(field1: String = "foo", field2: String = "bar") {
    def this() = {
        this() // <-- Does not compile, but how do I not duplicate the defaults?
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何我想念的东西.任何不需要重复参数默认值的想法?

谢谢!

constructor scala default-parameters scala-java-interop

9
推荐指数
1
解决办法
8162
查看次数

为什么我不能将String.Empty用作默认参数值?

今天我在构造函数中创建了一个默认参数值.

public SomeClass (String something = String.Empty)
{
   // ...
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨道.

"something"的默认参数值必须是编译时常量.

我的印象是String类上的Empty是编译时常量.

.field public static initonly string Empty
Run Code Online (Sandbox Code Playgroud)

我是否理解编译时常量的含义,还是我需要接受的更为古怪?

.net string default-parameters

9
推荐指数
1
解决办法
2917
查看次数

为什么我不能有模板和默认参数?

我在一个函数中更改了一个paremeter,使用模板接受任何类型的对象,但我不能将它与其他默认参数一起使用,是否有我遗漏的东西?

#include <string>
#include <iostream>

class MyClass {
    public:
    std::wstring msg = L"hey";
    MyClass(){};
};

class MyClass2{
    public:
    template<class T> MyClass2(T* t, int i);
};
template<class T>
MyClass2::MyClass2(T* t,int i=0){ std::wcout << t->msg << std::endl; }

int main(int argc, char **argv)
{
    MyClass mc;
    MyClass2 mc2(&mc);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

practice.cpp:16:32: error: redeclaration of 'MyClass2::MyClass2(T*, int)' may not have default arguments [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

我认为在模板中不使用默认值是合理的,但其他参数是否有原因?

c++ templates default-parameters

9
推荐指数
1
解决办法
7434
查看次数

箭头功能中的默认参数值

我是ES6 Javascript的新手,这意味着我正在探索它.我喜欢ES6中的箭头功能和默认参数功能,这在下面的站点中提到过.

http://es6-features.org/#ExpressionBodies
http://es6-features.org/#DefaultParameterValues

下面是我的ES6代码片段,我已经测试了这个Chrome 47.我正在尝试为我的箭头函数提供默认参数值,该函数当前正在抛出错误

<script type="text/javascript">
  'use strict';
  var greet = (name = 'Venkat') => (console.log('Hi ' + name + '!'));
  greet(); // expected output: Venkat
  greet('Venkatraman'); // expected output: Venkatraman
</script>
Run Code Online (Sandbox Code Playgroud)

让我知道它是否可能,如果是这样,用解决方案解释我在这里做错了什么.

javascript google-chrome default-parameters ecmascript-6

9
推荐指数
1
解决办法
3215
查看次数

Fortran 2003/2008:优雅的默认参数?

在fortran中,我们可以定义默认参数.但是,如果不存在可选参数,则也不能设置它.当使用参数作为具有默认值的关键字参数时,这会导致类似的笨拙结构

PROGRAM PDEFAULT 

  CALL SUB
  CALL SUB(3)

CONTAINS 
  SUBROUTINE SUB(VAL)
    INTEGER, OPTIONAL :: VAL
    INTEGER :: AVAL ! short for "actual val"

    IF(PRESENT(VAL)) THEN
       AVAL = VAL
    ELSE 
       AVAL = -1   ! default value 
    END IF

    WRITE(*,'("AVAL is ", I0)') AVAL
  END SUBROUTINE SUB

END PROGRAM PDEFAULT
Run Code Online (Sandbox Code Playgroud)

就个人而言,我经常遇到意外打字的问题VAL而不是AVAL,即接口中的变量名之间的断开,以及代码中使用的初始化值可能引入运行时错误 - 更不用说这种初始化方式相当冗长.

是否有一些更优雅的方式使用具有默认值的可选参数?

示例写一些类似的东西会更自然

IF(NOT(PRESENT(VAL))) VAL = -1 
Run Code Online (Sandbox Code Playgroud)

因为它避免了VALvs AVAL混乱.但它无效,大概是因为Fortran通过引用传递参数,因此如果语句中VAL不存在,则CALL不会与内存关联VALVAL = -1导致段错误.

fortran optional-parameters optional-arguments default-parameters default-arguments

9
推荐指数
2
解决办法
2702
查看次数

在自己的默认值中使用参数名称 - 是否合法?

enum class E {
    One,
    Two
};

void foo(E value = decltype(value)::One) {
}
Run Code Online (Sandbox Code Playgroud)

它可以用Clang(3.9)编译,但不能用GCC 6.1编译:value was not declared in this scope.

什么编译器是对的?

c++ parameters language-lawyer default-parameters

9
推荐指数
1
解决办法
155
查看次数

如何使用对象解构处理嵌套的默认参数?

我试图弄清楚是否有可能通过解构处理多个级别的默认参数.由于用文字解释起来并不容易,这是一个循序渐进的例子......


1 - 使用默认参数进行扁平对象解构

解构这个对象很简单:

let obj = {
  foo: 'Foo',
  bar: 'Bar'
};
Run Code Online (Sandbox Code Playgroud)

随着{foo = 'Foo', bar = 'Bar'} = {}在函数签名,如果没有当函数被调用时传入的参数的对象将被创建.如果传递了一个对象但是引用了一些属性undefined,则它们将被默认值替换.这段代码工作正常:

function fn1({foo = 'Foo', bar = 'Bar'} = {}) {
  console.log(foo, bar);
}

// OK
fn1(); // Foo Bar
fn1({foo: 'Quux'}); // Quux Bar
fn1({bar: 'Quux'}); // Foo Quux
fn1({foo: 'Quux', bar: 'Quux'}); // Quux Quux
Run Code Online (Sandbox Code Playgroud)

2 - 使用浅默认参数的嵌套对象解构

解构这个对象更难:

let obj = {
  foo: 'Foo',
  bar: {
    quux: 'Quux',
    corge: 'Corge'
  }
}; …
Run Code Online (Sandbox Code Playgroud)

javascript function destructuring default-parameters ecmascript-6

9
推荐指数
1
解决办法
1049
查看次数

默认参数和解构的这种特殊情况如何运作?

我今天正在尝试一些事情,并且遇到了我想要理解的行为.

var b = ({a = 1, b = 1, c = 1}) => a + b + c;

b(); // throws error.
Run Code Online (Sandbox Code Playgroud)

但如果它是这样定义的

var b = ({a = 1, b = 1, c = 1} = 0) => a + b + c;

b() // returns 3
b([]) // returns 3
Run Code Online (Sandbox Code Playgroud)

这不应该是一个错误吗?零在某种程度上成为了一个对象吗?它在某种程度上等同于以下?

var b = ({a = 1, b = 1, c = 1} = {}) => a + b + c; // this is possible I guess.
Run Code Online (Sandbox Code Playgroud)

我的问题不是常规的destrcuturing和default …

javascript destructuring default-parameters

9
推荐指数
1
解决办法
87
查看次数

如何为std :: shared_ptr <PureVirtualClass>传递默认参数

我有类型的功能

virtual void foo(bla, bla, bla, std::shared_ptr<LoggerInterface> logger) = 0;
Run Code Online (Sandbox Code Playgroud)

我想用NULL指针传递一个默认参数,如:

virtual void foo(bla, bla, bla, std::shared_ptr<LoggerInterface> logger = NULL) = 0;
Run Code Online (Sandbox Code Playgroud)

所以在实现中,如果logger是NULL我什么都不做,否则我使用记录器.

我试图找一个解决方案,但找不到..

UPD:重复声明是无关紧要的,我问的是默认的NULL参数.

gcc 4.4有可能不支持nullptr吗?

c++ shared-ptr default-parameters c++11

8
推荐指数
2
解决办法
4441
查看次数

仅当参数不为 null 时才将参数传递给函数

我需要将可为空参数传递给仅接受不可为空对象但定义了默认值的函数。

目前我正在使用 let:

fun myFun(a:String = "qqq"): Whatever {...}

val myString:String? = getNullableString()

val myFunResult = myString.?let{myFun(it)}?:myFun()
Run Code Online (Sandbox Code Playgroud)

这是很冗长的,并且当有多个可选参数时就不可能了。我需要类似的东西

val myFunResult = myFun(myString?:default)
Run Code Online (Sandbox Code Playgroud)

有没有一种实用的方法可以做到这一点?

default-parameters kotlin

8
推荐指数
1
解决办法
5841
查看次数