Uczę się języka Ruby i napotkałem failsłowo kluczowe. Co to znaczy?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
Uczę się języka Ruby i napotkałem failsłowo kluczowe. Co to znaczy?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
fail "Password too short" if password.length < 8fail "No user name set" unless username
Odpowiedzi:
W Rubim failjest synonimem raise. Słowo failkluczowe to metoda Kernelmodułu zawartego w klasie Object. failMetoda budzi błąd wykonania podobnie jak raisehasła.
failMetoda ma trzy przeciążeń:
fail: wywołuje RuntimeErrorbez komunikatu o błędzie.
fail(string): podnosi a RuntimeErrorz argumentem łańcuchowym jako komunikatem o błędzie:
fail "Failed to open file"
fail(exception [, string [, array]]): zgłasza wyjątek klasy exception(pierwszy argument) z opcjonalnym komunikatem o błędzie (drugi argument) i informacją zwrotną (trzeci argument).
Przykład: Załóżmy, że definiujesz funkcję, która powinna zakończyć się niepowodzeniem, jeśli podano zły argument. Lepiej jest podnieść ArgumentErrora nie RuntimeError:
fail ArgumentError, "Illegal String"
Inny przykład: Możesz przekazać cały ślad do failmetody, aby uzyskać dostęp do śladu wewnątrz rescuebloku:
fail ArgumentError, "Illegal String", caller
callerjest metodą jądra, która zwraca ślad w postaci tablicy ciągów w postaci file:line: in 'method'.
Bez argumentów zgłasza wyjątek w $! lub podnosi RuntimeError, jeśli $! jest zero. Z pojedynczym argumentem String wywołuje RuntimeError z łańcuchem jako komunikatem. W przeciwnym razie pierwszym parametrem powinna być nazwa klasy Exception (lub obiektu, który zwraca obiekt Exception po wysłaniu komunikatu o wyjątku). Opcjonalny drugi parametr ustawia komunikat skojarzony z wyjątkiem, a trzeci parametr jest tablicą informacji zwrotnych. Wyjątki są objęte klauzulą ratunkową bloków begin ... end.
Źródło: Dokumentacja Ruby dotycząca modułu jądra .
raise
Rubocop mówi o użyciu obu słów;
„Użyj
failzamiastraisedo sygnalizowania wyjątków”.„Użyj
raisezamiast,failaby ponownie zgłosić wyjątki”.
Oto przykład.
def sample
fail 'something wrong' unless success?
rescue => e
logger.error e
raise
end
fail == raise
Innymi słowy, failjest po prostu popularnym aliasem do raisemetody zgłaszania błędów. Stosowanie:
fail ArgumentError, "Don't argue with me!"
www.ruby-doc.org to twój przyjaciel. Kiedy wyszukałem w Google rubydoc fail„ Kernel ”, był to pierwszy hit. Radzę, jeśli masz wątpliwości, udaj się do ostatecznego źródła takich definicji.
raisepodczas obsługi wyjątków, afailkiedy nie.