Szukaj…


Liczby

Eliksir zawiera liczby całkowite i liczby zmiennoprzecinkowe . Literał całkowity można zapisać w formacie dziesiętnym, binarnym, ósemkowym i szesnastkowym.

iex> x = 291
291

iex> x = 0b100100011
291

iex> x = 0o443
291

iex> x = 0x123
291

Ponieważ Elixir używa arytmetyki bignum, zasięg liczb całkowitych jest ograniczony tylko dostępną pamięcią w systemie .

Liczby zmiennoprzecinkowe mają podwójną precyzję i są zgodne ze specyfikacją IEEE-754.

iex> x = 6.8
6.8

iex> x = 1.23e-11
1.23e-11

Zauważ, że Elixir obsługuje również formę wykładnika pływaków.

iex> 1 + 1
2

iex> 1.0 + 1.0
2.0

Najpierw dodaliśmy dwie liczby całkowite, a wynikiem jest liczba całkowita. Później dodaliśmy dwie liczby zmiennoprzecinkowe, a wynikiem jest liczba zmiennoprzecinkowa.

Dzielenie w eliksir zawsze zwraca liczbę zmiennoprzecinkową:

iex> 10 / 2
5.0

W ten sam sposób, jeśli dodasz, odejmiesz lub pomnożysz liczbę całkowitą przez liczbę zmiennoprzecinkową, wynikiem będzie zmiennoprzecinkowa:

iex> 40.0 + 2
42.0

iex> 10 - 5.0
5.0

iex> 3 * 3.0
9.0

Do dzielenia liczb całkowitych można użyć funkcji div/2 :

iex> div(10, 2)
5

Atomy

Atomy to stałe, które reprezentują nazwę czegoś. Wartość atomu to jego nazwa. Nazwa atomu zaczyna się od dwukropka.

:atom   # that's how we define an atom

Nazwa atomu jest unikalna. Dwa atomy o tych samych nazwach zawsze są równe.

iex(1)> a = :atom
:atom

iex(2)> b = :atom
:atom

iex(3)> a == b
true

iex(4)> a === b
true

Booleany true i false , w rzeczywistości są atomami.

iex(1)> true == :true
true

iex(2)> true === :true
true

Atomy są przechowywane w specjalnej tabeli atomów. Bardzo ważne jest, aby wiedzieć, że ta tabela nie jest zbierana w pamięci. Jeśli więc chcesz (lub przypadkowo jest to faktem), nieustannie twórz atomy - to zły pomysł.

Pliki binarne i ciągi bitów

Pliki binarne w eliksiru są tworzone za pomocą konstrukcji Kernel.SpecialForms << >> .

Są potężnym narzędziem, które sprawia, że Elixir jest bardzo przydatny do pracy z binarnymi protokołami i kodowaniami.

Pliki binarne i ciągi bitów są określane za pomocą rozdzielanej przecinkami listy liczb całkowitych lub wartości zmiennych, oznaczonych jako „<<” i „>>”. Składają się z „jednostek”, albo grupy bitów, albo grupy bajtów. Domyślne grupowanie to jeden bajt (8 bitów), określony za pomocą liczby całkowitej:

<<222,173,190, 239>> # 0xDEADBEEF

Ciągi eliksirów również konwertują bezpośrednio na pliki binarne:

iex> <<0, "foo">>
<<0, 102, 111, 111>>

Możesz dodać „specyfikatory” do każdego „segmentu” pliku binarnego, umożliwiając kodowanie:

  • Typ danych
  • Rozmiar
  • Endianness

Te specyfikatory są kodowane przez podążanie za każdą wartością lub zmienną za pomocą operatora „::”:

<<102::integer-native>>
<<102::native-integer>> # Same as above
<<102::unsigned-big-integer>>
<<102::unsigned-big-integer-size(8)>>
<<102::unsigned-big-integer-8>> # Same as above
<<102::8-integer-big-unsigned>>
<<-102::signed-little-float-64>> # -102 as a little-endian Float64
<<-102::native-little-float-64>> # -102 as a Float64 for the current machine

Dostępne typy danych, których możesz użyć, to:

  • liczba całkowita
  • pływak
  • bity (alias dla łańcucha bitów)
  • bitstring
  • dwójkowy
  • bajty (alias dla pliku binarnego)
  • utf8
  • utf16
  • utf32

Należy pamiętać, że podczas określania „rozmiaru” segmentu binarnego zmienia się on w zależności od „typu” wybranego w specyfikatorze segmentu:

  • liczba całkowita (domyślnie) 1 bit
  • unosić 1 bit
  • binarnie 8 bitów


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow