![](/img/trans.png)
[英]How to call a top level function that has the same name as variable in Dart?
[英]How to define a variable on top level and also assert it , in dart?
在dart文件中,我可以通過為其指定一個值(或表達式)來定義頂級變量:
String name = getNameFromSomewhere();
但是在某些情況下,我需要聲明一個有效名稱,因此我想:
String name = {
String _name = getNameFromSomewhere();
if(_name == null) {
throw new Exception("Name is invalid");
}
return _name;
}
但是語法無效,相反,我必須使其成為函數並調用:
String name = (() {
String _name = getNameFromSomewhere();
if(_name == null) {
throw new Exception("Name is invalid");
}
return _name;
})();
但是代碼不是那么易讀,是否有任何改進方法?
在Dart中,也不必在()
包裝IIFE,因此您可以用這種方式清理語法。 您還可以隱藏name
綁定並跳過私有本地。 最后,假設var
getNameFromSomewhere()
具有帶注釋的返回類型,可以使用var
,該類型將正確地推斷為String。
String name = () {
var name = getNameFromSomewhere();
if (_name == null)
throw new Exception("Name is invalid");
return name;
}();
現在,根據您要執行的操作,它可能無法按預期工作。 在Dart中,所有頂級成員和靜態字段都被延遲初始化。 在這種情況下,除非首次訪問name
,否則不會引發異常。 例如,以下代碼將不會拋出。
void main() {}
String getNameFromSomeWhere() => null;
String name = ...;
但是這段代碼會
void main() {
print(name);
}
String getNameFromSomeWhere() => null;
String name = ...;
我將初始化程序設為私有函數,僅出於可讀性或在子類中進行覆蓋:
String name = _getValidName();
String _getValidName () {
var name = _getNameFromSomewhere();
if (name == null)
throw new Exception("Name is invalid");
return name;
};
String _getNameFromSomewhere () { ... }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.