Можно ли переопределить функцию верхнего уровня в DART?

StackOverflow https://stackoverflow.com//questions/21001263

  •  20-12-2019
  •  | 
  •  

Вопрос

Позвольте сказать, у меня есть эта функция верхнего уровня:

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 ().

См.: https:// github.com / Flutter / Flutter / Blob / Master / Packages / Flutter / Test / Foundation / Capture_Output.dart

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top