2016-08-25 6 views

Odpowiedz

26

Nie ma składnia bezpośredni do or w środku wzorców, ale można użyć strażnika:

case testvalue do 
    n when n in [200, 400] -> 
    true 
    _ -> 
    false 
end 

Możesz także użyć or w strażnikach. Będzie to działać też, ale jest bardziej gadatliwy:

case testvalue do 
    n when n == 200 or n == 400 -> 
    true 
    _ -> 
    false 
end 

Zarówno będzie działał równie szybko jak in strażników wewnątrz przekształca się porównań + or, jak wspomniano w docs.

1

W tym konkretnym przypadku najlepiej byłoby zwrócić następujące informacje?

testvalue in [200, 400] 

Na przykład:

def test_my_value(testvalue), do: testvalue in [200, 400] 

To oceni do true lub false zgodnie z przeznaczeniem.

Inną możliwością byłoby wykorzystanie cond:

cond do 
    testvalue in [200, 400] -> 
    true 
    true -> 
    false 
end 
+0

'' cond' z prawdą -> 'tak naprawdę nie działa, ponieważ potrzebuję warunku, aby zwrócić true lub false. Jak to napisałeś, ostatni warunek zawsze będzie zgodny, a zatem wynik zawsze będzie fałszywy. –

+2

Składnia wygląda w tym przypadku nieco myląco, ale "true ->" jest zasadniczo odpowiednikiem klauzuli "else". Zobacz http://elixir-lang.org/getting-started/case-cond-and-if.html#cond Zatem powyższy kod DO zwraca odpowiednio "true" lub "false". –

4

Z mojego doświadczenia wynika, że ​​większy sens w elixir obsługiwać przypadki z dopasowywania funkcje/wzorzec, to bardziej czytelne, gdy baza kodu rośnie.

chciałbym zrobić coś takiego:

defp valid_http_response?(200), do: true 
defp valid_http_response?(400), do: true 
defp valid_http_response?(_), do: false 

Zgadzam się, że tak naprawdę nie ma sensu teraz, ale w przyszłości będzie szczęśliwszy :)

Powiązane problemy