Warum funktioniert die Karte nicht, aber foreach?

Erik

Das forEachfunktioniert gut

var newMarkers = new List<Marker>();
providers.forEach((p) {
  var marker = markerFrom(p);
  newMarkers.add(marker);
  print("got one");
});

_markers = newMarkers;

Dies mapwird jedoch nie aufgerufen, wenn es genau an der gleichen Stelle platziert wird wie forEach:

_markers = providers.map((p) => markerFrom(p));

Zusätzlich ist dies die markerFromMethode:

  Marker markerFrom(FoodProvider provider) {
  var marker = new Marker(new MarkerOptions()
    ..map = _map
    ..position = new LatLng(provider.latitude, provider.longitude)
    ..title = provider.name
    ..icon = 'http://maps.google.com/mapfiles/ms/icons/red-dot.png'
  );

  var infoWindow = new InfoWindow(new InfoWindowOptions()..content = marker.title);

  marker.onClick.listen((e) {
    infoWindow.open(_map, marker);
  });

  return marker;
}
lrn

Die mapFunktion Iterableist faul . Es wird nur ein Wrapper um das Original erstellt Iterable, aber es wird nichts unternommen, bis Sie mit der Iteration beginnen.

Das ist eine gute Sache , auch wenn es überraschend sein kann, wenn Sie an eine eifrige mapFunktion aus anderen Sprachen gewöhnt sind. Dies bedeutet, dass Sie Operationen an iterablen Elementen wie den folgenden kombinieren können:

listOfStrings
    .map((x) => complicatedOperationOnString(x))
    .take(2)
    .forEach(print);

Dies führt nur die komplizierte Operation an den ersten beiden Zeichenfolgen aus.

Wenn Sie eine Liste des Markers wollen, müssen Sie Anruf toListnach dem map:

_markers = providers.map(markerFrom).toList();

Im Allgemeinen sollten Sie sehr vorsichtig sein, wenn die an übergebene Funktion mapNebenwirkungen hat, die nur einmal auftreten sollen. Wenn Sie das Ergebnis mapmehrmals wiederholen, tritt dieser Effekt jedes Mal auf. Wenn Sie also Folgendes getan haben:

_markers = providers.map(markerFrom);
int count = _markers.length;
_markers.forEach((marker) { doSomething(marker); });

Sie würden riskieren, dass die Nebenwirkungen zweimal auftreten, einmal für lengthund einmal für forEach, die beide iterieren _markers. Es kommt nicht immer vor (einige Iterables kennen ihre, lengthohne sie tatsächlich zu iterieren), aber es ist immer ein Risiko. Verwenden Sie in diesen Fällen entweder, forEachwenn der Nebeneffekt das einzige ist, nach dem Sie toListsuchen , oder führen Sie sofort eine Aktion durch , um alle Vorgänge zu erzwingen, und sehen Sie sich danach nur die resultierende Liste an.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Warum funktioniert die Rückkehr zum Anrufer für "Liste", aber nicht für "Karte"?

Warum funktioniert "NOT IN" nicht, aber die Unterabfrage "NOT IN" funktioniert?

Warum funktioniert die foreach-Schleife, aber die Linq-Variante nicht?

Die einfache Mehrfachverarbeitungsfunktion funktioniert nicht, aber warum

Warum funktioniert diese Karte nicht?

Warum funktioniert `in` eine Karte (` (in {} ,,,) `) in Clojure mit` Vektoren`, aber nicht mit` Listen`?

Warum versteht die Funktionsvorlage NULL nicht, funktioniert aber mit nullptr?

Warum funktioniert die automatische Perlivifizierung nicht für -> @ *, aber -> @ [0]?

Warum funktioniert die << - Zuweisung in meiner Funktion, aber <- nicht?

Warum funktioniert die Zuweisung "=>" in diesem Fall, aber nicht "="?

Javascript: Warum funktioniert die Variable lokal, aber nicht global?

Wenn Sie Google Map auf Fragment verwenden, funktioniert es nicht, aber dieselbe Karte funktioniert auf Aktivität, warum?

Die SD-Karte funktioniert unter Linux nicht, aber unter Uboot. Fehler -84 EILSEQ

Ich möchte die V-Karte transparent machen, aber es funktioniert nicht richtig

Die Spark-Scala-Dataset-Karte funktioniert im Hauptmodus, aber nicht in der Funktion

Warum funktioniert die Methode in Python nicht, aber der Code über die Methode hinaus funktioniert?

Warum funktioniert die Abfrage in MySQL, die Prepare-Anweisung funktioniert, aber bind_param nicht?

Warum funktioniert .forEach(), aber keine for-Schleife?

Warum die Karte nach dem Upgrade von RxJS auf v6.3 nicht funktioniert?

Die GET-Anfrage funktioniert mit Postman, aber warum funktioniert sie nicht mit ReactJS-Abruf?

Warum funktioniert das auf Papier, aber die Logik funktioniert nicht auf Code?

Warum funktioniert die von sqlalchemy aufgerufene gespeicherte Prozedur nicht, aber der Aufruf von Workbench funktioniert?

Warum funktioniert die Methode replace() nicht richtig, aber das Spleißen von Zeichenfolgen funktioniert?

ArrowFunction in JavaScript funktioniert nicht wie erwartet. Warum? aber die normale Funktion funktioniert gut

Warum funktioniert diese Anglejs-Komponentenbindung nicht, aber die gleiche Stildirektive funktioniert?

Warum funktioniert die Bindung für TestClass nicht, aber das Festlegen derselben Eigenschaft funktioniert?

Warum funktioniert das forEach-Tag nicht mit Tomcat, aber mit Jetty ist alles in Ordnung?

Warum funktioniert `.forEach` auf dichten Arrays, aber nicht auf spärlichen Arrays?

Warum funktioniert forEach mit e.target.children, aber nicht mit getElementById-Kindern?

TOP Liste

  1. 1

    So verschieben Sie ein Bild in Flutter/Dart mit einem Draggable

  2. 2

    Unity Build-Fehler: Der Name 'EditorUtility' ist im aktuellen Kontext nicht vorhanden

  3. 3

    TypeAhead.js zeigt keine Ausgangsschienen an?

  4. 4

    Deklarieren einer nicht initialisierten Variablen in der Klassendefinition in Python

  5. 5

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  6. 6

    spring-data-jpa: ORA-01795: Die maximale Anzahl von Ausdrücken in einer Liste beträgt 1000

  7. 7

    Warum funktioniert Phantomjs nicht mit dieser Site?

  8. 8

    Interpolieren Sie mit Python die 2D-Matrix entlang der Spalten

  9. 9

    numpy: Berechnen Sie die Ableitung der Softmax-Funktion

  10. 10

    Wie vermeide ich, dass die gesamte App neu geladen wird, wenn Nav.Link von React-Bootstrap verwendet wird?

  11. 11

    MongoDB eingebettetes Dokument unterscheiden und filtern

  12. 12

    Aktualisieren des Werts im Json-Objekt in Python

  13. 13

    Warum funktioniert das Umgebungslicht in diesem Beispiel nicht?

  14. 14

    Python gibt einen Fehler aus, dass eine Datei nicht vorhanden ist, wenn dies eindeutig der Fall ist

  15. 15

    Wie verwende ich Format-Table ohne Abschneiden von Werten?

  16. 16

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  17. 17

    Überprüfen Sie, ob der ausgewählte Wert 'YES' ist, wenn ja, aktivieren Sie ein Steuerelement mit Javascript

  18. 18

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  19. 19

    Holen Sie sich verwandte Pillen Inhalt mit angeklickten img in Angular

  20. 20

    Eclipse Oxygen - Projekte verschwinden

  21. 21

    Wie aktualisiere ich ein Feld in einer Raumdatenbank mit einem Repository und einem Ansichtsmodell?

heißlabel

Archiv