Понятия, которые имеют двоичный файл, построенный из генератора - PullRequest
0 голосов
/ 22 мая 2018

Я просматриваю документы по пониманию на наличие эликсира, и меня смущает этот фрагмент:

for <<c <- " hello world ">>, c != ?\s, into: "", do: <<c>>

специально, эта часть: <<c <- " hello world ">>

Что это такое? Насколько я понимаю, c <- " hello world " - это генератор, а <<>> - это двоичный синтаксис.Итак, если собрать это воедино, это двоичный файл генератора?Странно, хорошо, но, возможно, это похоже на понимание списка Python, например, [x for x in (1..3)]

Однако, это не выглядит так, потому что оператор не может стоять сам по себе:

iex(2)>  <<c <- " hello world ">>
** (CompileError) iex:2: undefined function <-/2
    (elixir) src/elixir_bitstring.erl:65: :elixir_bitstring.expand_expr/4
    (elixir) src/elixir_bitstring.erl:32: :elixir_bitstring.expand/6
    (elixir) src/elixir_bitstring.erl:12: :elixir_bitstring.expand/4

Если код не может стоять сам по себе, то как он работает в пределах понимания?Действителен ли он где-либо еще за пределами понимания?

1 Ответ

0 голосов
/ 23 мая 2018

Это просто синтаксис, который Elixir выбрал для двоичного понимания.Эрланг, с другой стороны, использует <= вместо <- для двоичных пониманий:

% List Comprehension
1> [ X || X <- [1, 2, 3] ].
[1,2,3]
% Binary Comprehension
2> [ X || <<X>> <= <<1, 2, 3>> ].
[1,2,3]

Если код не может существовать сам по себе, то как он работает в пониманиях?

Этот синтаксис является допустимым кодом Elixir:

iex(1)> quote do: <<c <- " hello world ">>
{:<<>>, [], [{:<-, [], [{:c, [], Elixir}, " hello world "]}]}

, но, насколько мне известно, его использует только макрос for.for - это просто макрос в Elixir, так что вы можете определить свои собственные макросы, которые принимают тот же синтаксис.

Допустим ли он где-либо еще за пределами понимания?

Насколько я знаю, нет.

...