Udostępnij za pośrednictwem


Zwracane dane i kończenie

Dostępne są dwa wyrażenia, które kończą wykonywanie bieżącej podrouty lub programu; wyrażenia return i fail . Ogólnie rzecz biorąc, wywołania mogą zakończyć wykonywanie przed wykonaniem wszystkich instrukcji za pomocą wyrażenia return lub fail . Wyrażenie return zakończy wykonywanie bieżącego wywołania, a fail wyrażenie zakończy wykonywanie całego programu i spowoduje wystąpienie błędu środowiska uruchomieniowego.

Wyrażenie zwracane

Wyrażenie return kończy działanie z bieżącego elementu wywołującego i zwraca kontrolkę do metody wywoływanej. Zmienia kontekst wykonywania, wyskakując ramkę stosu.

Wyrażenie zawsze zwraca wartość do kontekstu obiektu wywoływanego; składa się ze słowa kluczowego return, po którym następuje wyrażenie odpowiedniego typu. Wartość zwracana jest obliczana przed wykonaniem wszystkich akcji zakończenia i zwróceniem kontrolki. Akcje zakończenia obejmują na przykład czyszczenie i zwalnianie kubitów przydzielonych w kontekście wywołania. W przypadku uruchamiania na symulatorze lub sprawdzaniu poprawności akcje zakończenia często obejmują również kontrole związane ze stanem tych kubitów, na przykład, czy są one prawidłowo odłączone od wszystkich kubitów, które pozostają aktywne.

Wyrażenie return na końcu wywołania, które zwraca Unit wartość, może zostać pominięte. W takim przypadku kontrolka jest zwracana automatycznie po uruchomieniu wszystkich instrukcji i wykonaniu wszystkich akcji zakończenia. Obiekty wywołujące mogą zawierać wiele return wyrażeń, choć implementacja adjoint dla operacji zawierających wiele return wyrażeń nie może być generowana automatycznie.

Na przykład

return 1;

lub

return ();

Wyrażenie niepowodzenia

Wyrażenie fail kończy obliczenia całkowicie. Odpowiada on błędowi krytycznemu, który przerywa program.

Składa się z słowa kluczowego fail, po którym następuje wyrażenie typu String. Element String powinien podać informacje o napotkanym niepowodzeniu.

Na przykład

fail "Impossible state reached";

lub, przy użyciu ciągu interpolowanego,

fail $"Syndrome {syn} is incorrect";

Oprócz podanego Stringfail wyrażenia najlepiej zbiera i zezwala na pobieranie informacji o stanie programu. Ułatwia to diagnozowanie i naprawianie źródła błędu oraz wymaga obsługi wykonywanego środowiska uruchomieniowego i oprogramowania układowego, które może się różnić w różnych miejscach docelowych.