[英]Dart: How does Dart match the named parameters in a Constructor of a Class?
[英]Can required parameters in a Dart constructor be named?
我正在為我正在學習的 Flutter/Dart 類使用一些 Dart 代碼。 我希望以下代碼能夠編譯,但它沒有:
class Person {
String? name;
int? age;
Person(this.name, this.age);
@override
String toString() {
return "name: $name\nage: $age";
}
}
void main() {
final person = Person(name: 'Joe', age: 30);
print(person);
}
當我將構造函數參數設為可選時,如下所示,它會編譯:
class Person {
String? name;
int? age;
Person({this.name, this.age});
@override
String toString() {
return "name: $name\nage: $age";
}
}
void main() {
final person = Person(name: 'Joe', age: 30);
print(person);
}
我嘗試搜索 Flutter 開發文檔的原因,或者在構造函數中使用所需參數及其名稱的方法,但我沒有找到任何東西。 我當然可以想象我希望所需的構造函數參數具有名稱的情況。
我的 pubspec.yaml 指定以下內容: environment: sdk: ">=2.12.0 <3.0.0"
您的第一個示例在 dart 中使用了所謂的“位置參數”。 您不能使用名稱標簽調用位置參數,這就是第一個示例無法編譯的原因。
第二個示例使用“命名參數”。 {}
中定義的任何參數都被視為命名參數,並且必須使用名稱標簽進行調用。 正如 dart 語言教程中所解釋的,命名參數是可選的,除非它們被明確標記為required
。
因此,只需在您需要的任何命名參數之前添加required
關鍵字。
class Person {
String? name;
int? age;
Person({required this.name, required this.age});
@override
String toString() {
return "name: $name\nage: $age";
}
}
void main() {
final person = Person(name: 'Joe', age: 30);
print(person);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.