Можно ли переопределить функцию верхнего уровня в DART?
Вопрос
Позвольте сказать, у меня есть эта функция верхнего уровня:
function log(String message) {
print(message);
}
.
Можно ли переопределить эту функцию в DART?
Решение
Простой ответ: Нет. Верхний уровень не может быть подклассно, поэтому переопределение не возможно.
Долго ответа: вы можете «завышать» их, но в зависимости от вашего использования, это может быть не то, что вы хотите.
Если вы хотите изменить поведение метода верхнего уровня из 3-й партийной библиотеки, которая вызывает сама библиотека, это невозможно (по крайней мере, я не знаю никакого способа сделать это).
Если вы просто хотите определить метод с тем же именем для использования в собственной библиотеке, вы можете просто определить метод и использовать его.Если оба библиотеки, так и ваш собственный метод необходимы в импортирующем 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."
}
. Я верю, что теперь вы можете сделать это, используя зонированное исполнение.
Это можно использовать для отмены команды печати в тесте.Вся код, который должен перенаправить, должен быть вызван в вызове rotzoned ().