Да, есть.В часовне ввод / вывод выполняется на каналах .Каждый канал имеет стиль ввода / вывода (представленный записью типа iostyle
), который определяет, как значения печатаются в этот канал, если в самом вызове чтения / записи не предусмотрен более конкретный стиль.Вызов writeln()
по сути является вызовом stdout.writeln()
, где stdout
- это канал, выход которого отображается в консоли.
В следующем примере показано, как изменить стиль ввода-вывода stdout ( Попробуйте онлайн ):
// print to stdout using its default style
writeln( 1.0 / 3.0 );
// create a new IO style with a precision of 15
var style = new iostyle(precision=15);
// change stdout to use this new style
stdout._set_style(style);
// print using the new style
writeln( 1.0 / 3.0 );
// restore the default style and print once more
stdout._set_style(defaultIOStyle());
writeln( 1.0 / 3.0 );
, где вывод:
0.333333
0.333333333333333
0.333333
Обратите внимание, что нельзя параллельно менять стиль канала параллельнокод без блокировки в первую очередь.Поскольку приведенный выше пример является полностью последовательным, все в порядке, но в контексте более крупной, потенциально параллельной программы лучшим подходом будет блокировка канала перед установкой его стиля следующим образом ( Попробуйте в Интернете ):
// print to stdout using its default style
writeln( 1.0 / 3.0 );
// create a new IO style with a precision of 15
var style = new iostyle(precision=15);
// change stdout to use this new style
stdout.lock();
stdout._set_style(style);
stdout.unlock();
// print using the new style
writeln( 1.0 / 3.0 );
// restore the default style and print once more
stdout.lock();
stdout._set_style(defaultIOStyle());
stdout.unlock();
writeln( 1.0 / 3.0 );
Электронная документация Chapel содержит больше информации о стилях ввода-вывода , полях iostyle
записи и блокировкеканалы . * * тысяча двадцать-девять