Konsolutdata (io)
io:format/1,2,3, io:fwrite/1,2,3, io:put_chars/1,2 och io:nl/0,1 är
inbyggda funktioner i runtimen för modulen io i bryggans katalog
(inbyggda funktioner); texten är den från io_lib:format/2,
byggd av io_lib:s motor och utplattad, med ~p utlagd
enligt OTP:s regler för io_lib_pretty
(io_lib/pretty.cpp).
Indatafunktionerna i io är skrivna i Erlang i
biblioteket.
Anrop
io:format(Format)ärio:format(Format, []). Båda returnerarok.io:fwrite/1,2,3är desamma somio:format/1,2,3;io:nl/0,1skriver en radbrytning.- Enheter för
io:format/3,io:fwrite/3,io:put_chars/2ochio:nl/1:standard_ioochuserär standard-utdata,standard_errorär standard-fel (standard-utdata töms först, så att de två behåller sin ordning). En pid, eller en atom registrerad till en, är en I/O-server: texten går till den som en I/O-protokollbegäran{put_chars, unicode, Utf8}(clause_io:put_chars/2), servern skriver den med sin kodning och anropet returnerar svaret. En oregistrerad atom gerbadarg, en död piderror:terminated, anroparen själverror:calling_self, varje annan termfunction_clause, som i OTP. io:put_chars(Chardata)skriver chardata: Unicode-tecken, UTF-8-binaries och nästlade listor som slutar med[]eller en binary. Allt annat (en atom, ett surrogat, ogiltig UTF-8, en bitstring) kastarbadarg.- Texten byggs i sin helhet och skrivs sedan som UTF-8, som OTP:s enhet för
standard-utdata gör i läget
-noshell(kodningenunicode). Ett fel skriver ingenting. En avvisad skrivning är runtime-feletoutput_failure(exit 70). - Kvalificerade anrop,
fun io:format/2,apply(io, format, Args)ochM:format(...)når alla de inbyggda funktionerna. En batchmodul med namnetioersätter inte de inbyggda funktionerna (OTP:sioär klistrig (sticky), registrering).
Format
Formatär en atom (dess tecken), en binary (dess byte som Latin-1-tecken) eller en lista. Ett listelement som inte är ett tecken är chardata som skrivs som det är, utan styrsekvenser, och flyttar kolumnen ett steg (OTP:s egenhet).- Styrsekvenser
~F.P.PadModC: fältbreddF(negativ eller-: vänsterjusterad), precisionP, utfyllnadstecken,*som tar ett heltal (eller utfyllnaden) från argumenten, modifierarnat(Unicode),l(ingen strängdetektering),k(ordnade maps) ochK(ordningen från argumenten:ordered,reversed; jämförelse-funs gerbadarg). Maps skrivs i nyckelordning. - Alla styrsekvenser i OTP 29 med dess fältregler:
~w ~W ~p ~P ~s ~e ~f ~g ~b ~B ~x ~X ~+ ~# ~c ~i ~n ~~.~skortar av eller fyller ut tillPinomF;~w, heltal och flyttal skriver*-tecken när texten inte ryms iF;~cupprepar tecknet; heltalsbaser tas frånP(2..36);~nmedFskriverFradbrytningar; bredder räknas somio_lib:chars_length/1. - Utan
ttar~sendast Latin-1-tecken och~cskriver den låga byten av sitt heltal;~w/~pskriver atomtecken utanför Latin-1 som\x{...}. Medtläser~sbinaries som UTF-8 (med Latin-1 som reserv) och~pskriver<<"..."/utf8>>för utskrivbara UTF-8-binaries. badarg: allt som fårio_lib:format/2att misslyckas (ett okänt styrtecken, saknade eller extra argument, ett argument av fel typ,Fmindre änP, en vänsterjusterad~peller~n, en bas utanför 2..36), och utdata som inte är Unicode.
Snygg utskrift (~p)
- Radlängden är
F(standard 80, 0 skriver en rad); den första kolumnen ärP, annars den kolumn som utdata har nått på sin rad (tabbar till multiplar av 8). ~Pklipper termen vid sitt djupargument ochchars_limit(alternativ tillio:format/3ochio_lib:format/3) vid styrsekvensens andel av tecknen, och skriver...där delar utelämnats, som OTP gör.- Termen blir OTP:s mellanform: varje värde med sin längd på en rad; strängar
(platta listor av utskrivbara Latin-1-tecken, standardvärdet för
io:printable_range()), utskrivbara binaries, atomer och tal är text. - Det som ryms på resten av raden skrivs i sin helhet. Listor och tupler bryts
mellan element, justerade efter hakparentesen; taggade tupler
(
{atom, ...}) justeras efter taggen, eller dras in med 4 (eller 1) när det skulle passera halva raden; par i maps och fält i native records som inte ryms placerar värdet på nästa rad; långa binaries radbryts mellan byte. - Behållare som är nästlade djupare än 256 nivåer kastar
system_limit(layouten rekurserar på native-stacken). - Formateringen körs till slut, hur stor termen än är (portioner).
Clause