Dart 允許我們為函式輸入引數,這很棒:
void createPerson(String name, int age, sayHey: Function) {
/* Create */
}
但是如果引數應該是所述型別的串列呢?IE:
void createPeople(List<?> peopleConfigs) {
/* Create multiple */
}
peopleConfigs在這里打字的最佳方式是什么?傳遞引數時,諸如代碼提示/完成之類的工具是否仍然有效?
我知道我可以使用,List<Map<String, dynamic>>但我想知道是否有一種更型別安全的方法,如果使用了不應該使用的鍵,則會引發編譯時錯誤。
我來自 TypeScript,這很簡單:
createPeople(peopleConfigs: {name: string, age: number, sayHey: () => void}[]): void {
/* Create multiple */
}
uj5u.com熱心網友回復:
如果您希望peopleConfigs擁有一些具有定義型別簽名的函式:
您可以typedef為此使用:
typedef PersonConfig = void Function(
String name,
int age,
Function sayHey,
);
//ok function
void create1(String name, int age, Function sayHey) {}
//not ok function
void create2(String name, double age, Function sayHey) {}
void createPeople(List<PersonConfig> peopleConfigs) {
//some logic
}
void main() {
createPeople(<PersonConfig>[
create1, //<--- ok
(String name, int age, Function sayHey) {}, //<--- ok
create2, // <--- error
]);
}
如果您希望peopleConfigs持有類實體:
class PersonConfig {
final String? name;
final int? age;
final Function? sayHey;
PersonConfig({
this.name,
this.age,
this.sayHey,
});
}
void createPeople(List<PersonConfig> peopleConfigs) {
//some logic
}
void main() {
createPeople(<PersonConfig>[
PersonConfig(name: "", age: 0, sayHey: () => "hi"),
]);
}
uj5u.com熱心網友回復:
您可以創建一個型別,然后您可以定義該型別的串列作為引數:
class Parameters {
final String name;
final int age;
final Function sayHey;
Parameters({required this.name, required this.age, required this.sayHey});
}
void someFunction(List<Parameters> parameters) {
print(parameters);
}
void main() {
someFunction([
Parameters(name: "Joe", age: 21, sayHey: () => print("hi") ),
Parameters(name: "Suzi", age: 24, sayHey: () => print("hello") ),
]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374331.html
