[英]Is it possible to override a top-level function in Dart?
讓我們說我有這個頂級功能:
function log(String message) {
print(message);
}
是否可以在Dart中覆蓋此功能?
簡單回答:不可以。頂層不能被子類化,因此無法覆蓋。
更長的答案:你可以“掩蓋”它們,但根據你的用例,這可能不是你想要的。
如果您想要更改由庫本身調用的第三方庫的頂級方法的行為,這是不可能的(至少,我不知道如何做到這一點)。
如果您只想定義一個具有相同名稱的方法以在您自己的庫中使用,您可以只定義該方法並使用它。 如果在導入dart文件中需要庫和您自己的方法,則可以在庫前添加前綴並使用或不使用前綴來區分這些方法:
import "lib1.dart" as mylib;
void main() {
log(); // log() method defined in this file
mylib.log(); // log() method defined in lib1.dart
}
我不確定你是否可以覆蓋函數,但是你不能把它包裝成一個類並使用繼承來覆蓋一個方法嗎?
abstract class Parent{
void log(String message){
print("parent message");
print(message);
}
}
class Child extends Parent{
void log(String message){
print("child message");
print(message);
}
}
這似乎是不可能的。
在try.dartlang.org上試試這個:
test() => print('hallo');
test() => print('bye');
main() {
test();
}
並看到你得到一個編譯錯誤(“重復定義”);
如果我們在談論http://en.wikipedia.org/wiki/Method_overriding :
這是正確的嗎? 我覺得很奇怪,回答這個問題非常簡單明確,因為我尊敬的人已經回答了這個問題。
class Super {
void log(){
print("I am super.");
}
}
class MoreSuper extends Super {
void log() {
print("I am superer.");
}
}
void main() {
var s = new Super();
var ss = new MoreSuper();
s.log(); // "I am super."
ss.log(); // "I am superer."
}
我相信你現在可以使用分區執行來做到這一點。
這可用於在測試中重新映射打印命令。 必須從runZoned()調用中調用所有應重定向的代碼。
請參閱: https : //github.com/flutter/flutter/blob/master/packages/flutter/test/foundation/capture_output.dart
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.