2015-09-08 21 views
12

Potrzebuję pomocy w zrozumieniu następujących składni w eliksirach: !, ?, _ i .. Jaka jest rola składni w funkcji eliksiru? Na przykład Repo.get!.Co to jest "!", "?", "_" I "." składnia w eliksiru

Nie jestem pewien, czy były one po prostu nazwą funkcji, czy rolą. Chociaż wiem, że . służy do wywoływania funkcji anonimowej. I _ dla każdego lub variadic?

Odpowiedz

18

! - Konwencja dla funkcji, które podnoszą wyjątki w przypadku awarii.

? - Konwencja o funkcjach, które zwracają wartość logiczną

_ - służy do ignorowania argumentu lub część wyrazu wzór meczu.

. - Tak jak wspomniano, jest używany do wywoływania anonimowej funkcji, ale jest również używany do uzyskiwania dostępu do funkcji modułu, takiej jak Mod.a(arg).

+2

Nie istnieje istotne różnice między zmiennymi * początek * The '_' (takich jak '_foobar') i te, które składają się tylko * * od' _' (takich jak' def foo (_ _bar) do, _bar end'). Próby użycia '_' powodują błędy" niezwiązanej zmiennej "w czasie kompilacji. Zmienne poprzedzone znakiem podkreślenia, _bar, służą do zapobiegania ostrzeżeniom dotyczącym nieużywanych zmiennych i nie zapobiegają kompilacji. Ich użycie generuje tylko ostrzeżenie: "ostrzeżenie: podkreślona zmienna" _bar "jest używana po ustawieniu.Wiodący podkreślnik wskazuje, że wartość zmiennej powinna być ignorowana ... " – Marc

11

Po pierwsze ! i ?

Są to konwencje nazewnictwa stosowane zwykle do końca nazwy funkcji i są nie jakiejkolwiek specjalnej składni.

! - Podniesie wyjątek, jeśli funkcja napotka błąd.

Jednym z dobrych przykładów jest Enum.fetch! (Ma również ten sam Enum.fetch, który nie powoduje wyjątku) .Finduje element przy danym indeksie (oparty na zera). Podnosi OutOfBoundsError, jeśli podana pozycja znajduje się poza zakresem kolekcji.

? - Używany, aby pokazać, że funkcja zwróci wartość logiczną, prawdę lub fałsz. Dobrym przykładem jest Enum.any?, który zwraca prawdę, jeśli funkcje są prawdziwe dla dowolnej wartości, w przeciwnym razie zwracają fałsz

_ - Zignoruje to argument funkcji lub dopasowania wzorca. Jeśli chcesz, możesz nadać nazwę po podkreśleniu.Ex - _base

Jest to powszechnie używane na końcu funkcji rekursywnej ogona. Dobrym przykładem jest funkcja mocy. Jeśli chcesz podnieść dowolnym systemie liczbowym do 0 wynik it 1, więc to naprawdę nie ma znaczenia, co baza jest

defp getPower(_base,0), do: 1 

. - Służy do żadnej funkcji w module lub jak zaproponował powołanie anonimową funkcję

iex(1)> square = fn(number) -> number * number end 
iex(2)> square.(4) 
+2

Po prostu notatka: funkcja' getPower' może korzystać z dopasowywania wzorców: 'defp getPower (_base, 0), do: 1' – asymmetric