Skip to content

std.io ​

Модуль ввода-вывода. Предоставляет стандартный вывод, чтение стандартного ввода, а также удобные функции для «одноразового чтения/записи всего файла». Для инкрементального чтения/записи файлов по дескриптору используйте std.os.

yaoxiang
use std.io

Платформенная доступность ​

Функции начиная с read_line и далее зависят от I/O операционной системы и не экспортируются в целевой платформе wasm32: read_line, read_file, write_file, append_file. print / println / format_fallback доступны на всех платформах.

Список функций ​

ФункцияСигнатура
print(...args) -> Void
println(...args) -> ()
read_line() -> String
read_file(path: &String) -> String
write_file(path: &String, content: &String) -> Bool
append_file(path: &String, content: &String) -> Bool
format_fallback(value, type_name: &String) -> String
## Функции

print ​

yaoxiang
print: (...args) -> Void

Последовательно выводит все аргументы, без перевода строки. Между несколькими аргументами вставляется один пробел.

Аргументы форматируются: String выводит своё содержимое напрямую; List / Dict / Tuple раскрываются рекурсивно; остальные значения выводятся в виде литералов.

yaoxiang
use std.io

main: () -> Void = {
    print("hello")
    print(" ")
    print("world")
    println("")
}

println ​

yaoxiang
println: (...args) -> ()

Аналогично print, но в конце вывода добавляется перевод строки.

println() без аргументов выводит пустую строку:

yaoxiang
main: () -> Void = {
    println("Hello, YaoXiang!")
}

read_line ​

yaoxiang
read_line: () -> String

Читает одну строку из стандартного ввода.

Возврат: вся прочитанная строка, без завершающего символа перевода строки (\n или \r\n). Ошибка: при ошибке чтения выбрасывается E6007.

Интерактивные примеры не могут быть автоматически запущены в документации, приведённый ниже код даётся только для справки.

yaoxiang
use std.io

main: () -> Void = {
    println("Пожалуйста, введите ваше имя:")
    name = io.read_line()
    println("Привет, " + name)
}

read_file ​

yaoxiang
read_file: (path: &String) -> String

Читает всё содержимое файла целиком в строку.

  • path — путь к файлу (только для чтения, заимствование)

Возврат: всё содержимое файла. Ошибка: при отсутствии файла или отсутствии прав доступа выбрасывается E6007. Не возвращает пустую строку.

yaoxiang
use std.assert
use std.io
use std.os
use std.string

main: () -> Void = {
    p = "__yx_doc_read_file.txt"
    io.write_file(p, "hello")

    content = io.read_file(p)
    assert(content == "hello")

    os.remove(p)
}

write_file ​

yaoxiang
write_file: (path: &String, content: &String) -> Bool

Записывает content в path, перезаписывая существующее содержимое; если файл не существует, он создаётся.

  • path — путь к файлу (только для чтения, заимствование)
  • content — содержимое для записи (только для чтения, заимствование)

Возврат: true при успешной записи. Ошибка: если каталог не существует или нет прав доступа, выбрасывается E6007 (не возвращает false).

yaoxiang
use std.assert
use std.io
use std.os

main: () -> Void = {
    p = "__yx_doc_write_file.txt"
    ok = io.write_file(p, "hello")
    assert(ok)
    assert(os.exists(p))
    os.remove(p)
}

append_file ​

yaoxiang
append_file: (path: &String, content: &String) -> Bool

Дописывает content в конец path; если файл не существует, он создаётся.

Возврат: true при успешной записи. Ошибка: при отсутствии прав доступа выбрасывается E6007.

yaoxiang
use std.assert
use std.io
use std.os

main: () -> Void = {
    p = "__yx_doc_append_file.txt"
    io.write_file(p, "hello")
    io.append_file(p, " world")
    assert(io.read_file(p) == "hello world")
    os.remove(p)
}

format_fallback ​

yaoxiang
format_fallback: (value, type_name: &String) -> String

Форматирует значение по имени типа, выводя представление с префиксом вида int(42) / list@3.

Это внутренняя вспомогательная функция, вызываемая по обратному вызову из общего пути форматирования среды выполнения; в повседневном коде следует напрямую использовать std.convert.to_string.

  • value — произвольное значение
  • type_name — строка с именем типа

Возврат: строковое представление с префиксом типа.

yaoxiang
use std.assert
use std.io
use std.string

main: () -> Void = {
    s = io.format_fallback(42, "int")
    assert(string.contains(s, "42"))
}

Связанные разделы ​

  • std.os — дескрипторы файлов, каталоги и переменные среды
  • std.convert — преобразование значения в строку