2014-02-12 2 views
6

В дротиком:Можете ли вы объединить именованный параметр с коротким параметром конструктора?

Именованные параметры функционируют как SO-

String send(msg, {rate: 'First Class'}) { 
    return '${msg} was sent via ${rate}'; 
} 

// you can use named parameters if the argument is optional 
send("I'm poor", rate:'4th class'); // == "I'm poor was sent via 4th class" 

параметров стенография конструктора функционируют как SO-

class Person { 
    String name; 

    // parameters prefixed by 'this.' will assign to 
    // instance variables automatically 
    Person(this.name); 
} 



Есть ли способ сделать что-то вроде ниже? -

class Person{ 
    String name; 
    String age; 

    Person({this.name = "defaultName", this.age = "defaultAge"}); 
} 

//So that I could do something like: 
var personAlpha = new Person(name: "Jordan"); 

Спасибо,

образцы кода заимствована из dartlang synonyms

ответ

3

Вы просто должны использовать двоеточие вместо равен

class Person { 
    String name; 
    String age; 

    Person({this.name: "defaultName", this.age: "defaultAge"}); 
} 

Я считаю, это еще запутанным, что дополнительные параметры используют = для назначить значения по умолчанию, но с именем use :. Должен спросить себя.

+1

Аргумент для этого синтаксиса состоял в том, что он был «похож на» синтаксис буквенных букв. – lrn

+0

Спасибо за информацию. –

+2

См. Также http://dartbug.com/7979 – lrn

2

Вы можете использовать «это». синтаксис со всеми типами аргументов. Как уже говорилось выше, для значений по умолчанию для именованных параметров вам необходимо::

Вы даже можете использовать «это». для функциональных типизированных параметров:

class C { 
    Function bar; 
    C({int this.bar(int x) : foo}); 

    static foo(int x) => x + 1; 
} 
+0

Это тоже ужасно. Спасибо Ирну! Как мог бы быть барным? Оба параметра bar и foo имеют требуемый параметр x; поэтому, если вы просто не включили бар в качестве параметра, то как узнать, что такое x? – Jordan

+0

В этом случае «bar» является стандартным необязательным параметром, который ожидает значение. Это значение должно иметь тип функции (int-> int), но в ином случае это не отличается от записи 'C ({String this.bar: 'bif'})'. Если аргумент опущен, он будет использовать значение по умолчанию, иначе он будет использовать любой аргумент. Вы можете назвать его «новым C (bar: null)» или 'new C (bar: (z) => -z)'. – lrn

Смежные вопросы