Domanda

Diciamo che ho questa funzione di alto livello:

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

È possibile sovrascrivere questa funzione in DART?

È stato utile?

Soluzione

Risposta semplice: No. Il livello superiore non può essere sottoclassato, quindi il sovrascrivero non è possibile.

Risposta più a lungo: puoi "oscurare" loro, ma a seconda del tuo caso, questo potrebbe non essere quello che vuoi.

Se si desidera modificare il comportamento di un metodo di alto livello di una biblioteca-partito che viene chiamata dalla libreria stessa, questo non è possibile (almeno, non conosco alcun modo per farlo).

Se vuoi solo definire un metodo con lo stesso nome per l'uso nella tua libreria, puoi semplicemente definire il metodo e usarlo.Se sia la libreria che il proprio metodo è necessario nel file DART importazione, è possibile prefissare la libreria e chiamarla con o senza il prefisso per distinguere i metodi:

import "lib1.dart" as mylib;

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

Altri suggerimenti

Non sono sicuro se riesci a scavalcare le funzioni, ma non riesci ad avvolgerlo in una classe e utilizzare l'ereditarietà per sovrascrivere un metodo?

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

che sembra essere impossibile.

Prova questo su Try.DartLang.org:

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

main() {
    test();
}
.

e vedi che ottieni un errore di compilazione ("definizione duplicata");

Se stiamo parlando di http://en.wikipedia.org/wiki/method_overriding :

è giusto?Mi sento strano rispondendo così semplicemente e sicuramente come quelli qui che rispetto hanno risposto a 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."
}
.

Credo che tu possa ora farlo usando l'esecuzione zone.

Può essere utilizzato per rimappare il comando di stampa all'interno di un test.Tutto il codice che dovrebbe reindirizzare deve essere chiamato all'interno della chiamata runzoned ().

See: https:// GitHub.com / flutter / flutter / blob / master / pacchetti / flutter / test / fondazione / capture_output.dart

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top