Pregunta

Digamos que tengo esta función de nivel superior:

function log(String message) {
    print(message);
}

¿Es posible anular esta función en Dart?

¿Fue útil?

Solución

Respuesta simple: No. El nivel superior no se puede subclasificar, por lo que no es posible anular.

Respuesta más larga: puede "eclipsarse", pero dependiendo de su caso de uso, esto puede no ser lo que desea.

Si desea cambiar el comportamiento de un método de nivel superior de una biblioteca de terceros que se llama la biblioteca en sí misma, esto no es posible (al menos, no conozco ninguna manera de hacer esto).

Si solo desea definir un método con el mismo nombre para usarlo en su propia biblioteca, puede definir el método y usarlo.Si se necesita tanto la biblioteca como su propio método en el archivo DART importador, puede prefijar la biblioteca y llamarlo con o sin el prefijo para distinguir los métodos:

import "lib1.dart" as mylib;

void main() {
    log(); // log() method defined in this file
    mylib.log(); // log() method defined in lib1.dart
}

Otros consejos

No estoy seguro de si puede anular las funciones, pero ¿no puede envolver esto en una clase y usar la herencia para anular un método?

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);          
   }
}

que parece ser imposible.

Pruebe esto en try.dartlang.org:

test() => print('hallo');
test() => print('bye');

main() {
    test();
}

y vea que obtiene un error de compilación ("Definición duplicada");

Si estamos hablando de http://en.wikipedia.org/wiki/method_overriding :

¿Es este derecho?Me siento extraño, respondiendo esto tan simple y definitivamente como aquellos aquí, respeto, he respondido no.

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."
}

Creo que ahora puede hacer esto usando la ejecución zonificada.

Esto se puede utilizar para remapar al comando de impresión dentro de una prueba.Todo el código que debe redirigir debe llamarse desde la llamada Runzoned ().

Ver: https:// github.com / Flutter / Flutter / Blob / Master / Paquetes / Flutter / Prueba / Fundación / Capture_Output.Dart

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top