elixir - Strange behavior with String.to_integer/1 -


i have strange in elixir string.to_integer. nothing major, know if there's way chain functions pipe operator.

here problem. line of code (you can try in "iex"):

[5, 6, 7, 3]  |> enum.reverse  |> enum.map_join "", &(integer.to_string(&1)) 

returns string "3765"

what want integer. have add little piece of code |> string.to_integer @ end previous statement , should have integer. let's try. piece of code:

[5, 6, 7, 3]  |> enum.reverse  |> enum.map_join "", &(integer.to_string(&1))  |> string.to_integer 

gives me this: "3765". not integer, string!

if though:

a = [5, 6, 7, 3]  |> enum.reverse  |> enum.map_join "", &(integer.to_string(&1))  string.to_integer(a) 

it returns me integer: 3765.

it's i'm doing right makes me mad because love chain these function way amazing pipe operator.

thanks or lights. elixir fun!

you need add parentheses around arguments map_join. currently, code interpreted as

[5, 6, 7, 3]  |> enum.reverse  |> enum.map_join("", &(integer.to_string(&1) |> string.to_integer)) 

what want though

[5, 6, 7, 3]  |> enum.reverse  |> enum.map_join("", &(integer.to_string(&1))) |> string.to_integer 

generally, need use parentheses when using captures inside pipeline avoid ambiguities. capture can simplified &integer.to_string/1:

[5, 6, 7, 3]  |> enum.reverse  |> enum.map_join("", &integer.to_string/1) |> string.to_integer 

but plain enum.join same thing. if @ the implementation, convert integers strings anyway, using the string.chars protocol.

[5, 6, 7, 3]  |> enum.reverse  |> enum.join |> string.to_integer 

by way, can achieve same thing without using strings @ all:

[5, 6, 7, 3]  |> enum.reverse  |> enum.reduce(0, &(&2 * 10 + &1)) 

oh, , there's integer.digits , integer.undigits, can used convert integer , list of digits. it's not present in current release, though in 1.1.0-dev branch suspect come in 1.1.0. can watch progress here.

[5, 6, 7, 3]  |> enum.reverse  |> integer.undigits 

Comments

Popular posts from this blog

c# - Binding a comma separated list to a List<int> in asp.net web api -

Delphi 7 and decode UTF-8 base64 -

html - Is there any way to exclude a single element from the style? (Bootstrap) -