Sebb
Any chance we get format for string interpolation?
sth like string — Common string operations — Python 3.10.4 documentation?
I really fear erlang’s ~F.P.PadModC (Erlang -- io)
Most Liked
al2o3cr
For future readers, here’s the format needed:
:io.fwrite("#~2.16.0B~2.16.0B~2.16.0B", [r, g, b])
# prints the string "#F27B04"
Values smaller than zero or larger than 255 will be replaced with **:
:io.fwrite("#~2.16.0B~2.16.0B~2.16.0B", [-r, g, b])
# prints "#**7B04"
:io.fwrite("#~2.16.0B~2.16.0B~2.16.0B", [10*r, g, b])
# prints "#**7B04"
Breakdown in detail:
~2.16.0B
2is the field width. Without it, values less than 16 will only output a single character16is called “precision” in the API, but for theBcontrol sequence it’s the base to use0is the padding character, because we want4to print as04not<space>4
hauleth
That topic gave me an idea for a library. I will try to draft something this weekend.
al2o3cr
IMO that’s too big of a change - one of the nice things about Elixir is the regularity of the syntax, and that would make #{} magical in a way that’s not available elsewhere. A more “Elixir-y” solution would be to make the conversion explicit:
"##{to_hex(r)}#{to_hex(g)}#{to_hex(b)}"
...
defp to_hex(v), do: :io_lib.format("~2.16.0B", [v])
Some other gotchas that come to mind:
- making runtime-determined values work (
*in the various positions) means more tricky syntax - what would
"#{some_calculation():i}"do? “Ignore one thing from the input” makes a lot more sense when the format and the data are fully separated (as in:io) - the term-handling codes don’t output Elixir-shaped strings:
:io.fwrite("~w", [DateTime.utc_now()])
prints
#{'__struct__' => 'Elixir.DateTime',calendar => 'Elixir.Calendar.ISO',day => 1,hour => 22,microsecond => {937508,6},minute => 47,month => 5,second => 18,std_offset => 0,time_zone => <<69,116,99,47,85,84,67>>,utc_offset => 0,year => 2022,zone_abbr => <<85,84,67>>}
hauleth
What is there to fear? It is almost the same as Python instead of % you use ~. If anything we will get wrapper over io_lib:format/2 as it is handy for report_cb in logger handlers.
RemyXRenard
This is somewhat of a thread necro, and I already posted this in the Livebook category, but if someone comes here looking for some :io_lib.format examples, I put together a Livebook.
Fun with formatting:







