length: int- Модуль
- std.
bytes → - Получатель
- Byte
Buffer - Минимальное число аргументов
- 0
- Максимальное число аргументов
- 0
Declaration and parameters
СсылкаДоступность
Включено по умолчанию · Не определено
Import std.bytes in language mode 5.21.
The current compiler selects std/bytes.tpz for this language mode. Availability in other released editions and inclusion in each installed distribution are Pending.
Получатель
ByteBuffer
Ограничения параметров
Bytes.length and ByteBuffer.length are read-only int properties that report the number of bytes.
JSONValue.length is an Option<int> property. Arrays and objects return Some(count) for their element or member count. Other JSON kinds return None().
JSONValue.keys and JSONValue.values are properties returning Option<Array<string>> and Option<Array<JSON. Objects return Some(keys) or Some(values). Other JSON kinds return None().
Read these properties without parentheses, as with Array.length, Map.length, Map.keys, Map.values, and Set.length. Calling a property value is rejected as a non-callable value.
Связанное правило · Read collection sizes, keys, and values as properties →ByteBuffer.allocate accepts a nonnegative int length and an int initial value from 0 through 255. The initial value defaults to zero.
The new buffer has exactly that many copies of the initial byte. Zero length is valid and still requires a valid initial byte.
A negative length produces TPZ4001 at runtime. An invalid initial byte or an allocation that cannot be satisfied produces TPZ5001 at runtime.
ByteBuffer.fromBytes converts an immutable Bytes value into a mutable ByteBuffer value containing the same bytes.
ByteBuffer.toBytes converts the current buffer contents into an immutable Bytes value.
ByteBuffer.length is a read-only byte count property. Buffer operations never change its length.
Assignment, argument passing, return, capture, and aggregate storage follow collection value semantics.
Supplied expressions evaluate once from left to right before allocation or conversion. These operations have no I/O effects.
Связанное правило · Allocate buffers and convert byte values →Результат
The declared result type is int.
Эффекты
Ошибки
Result and effects
СсылкаSelect this field from a value of its named type without call parentheses.
Read the fixed number of buffer bytes as a read-only int property. Buffer writes preserve this count.
Why
СсылкаCollection observations use the same property syntax as Array, Map, and Set. Parentheses identify calls rather than stored or derived values.
Related entries
СсылкаRead collection sizes, keys, and values as properties
СсылкаRead collection sizes, keys, and values as properties
Bytes.length and ByteBuffer.length are read-only int properties that report the number of bytes.
JSONValue.length is an Option<int> property. Arrays and objects return Some(count) for their element or member count. Other JSON kinds return None().
JSONValue.keys and JSONValue.values are properties returning Option<Array<string>> and Option<Array<JSON. Objects return Some(keys) or Some(values). Other JSON kinds return None().
Read these properties without parentheses, as with Array.length, Map.length, Map.keys, Map.values, and Set.length. Calling a property value is rejected as a non-callable value.
Причина
The same collection observation should use the same syntax across core collections and library values. Keeping JSONValue results optional preserves its distinction between collections and scalar values.
Read the same properties on core collections
Ссылкаimport std.iolet array = [2, 3]let entries = map { "name": "Topaz" }let values = set { 2, 3 }io.writeLine("{array.length}:{entries.length}:{values.length}")io.writeLine(entries.keys[0])io.writeLine(entries.values[0])
2:1:2
name
Topaz
Ожидаемый результат
Ожидаемый результат
Выполнение завершается. Код завершения 0.
2:1:2nameTopaz
Read a byte sequence size
Ссылкаimport std.bytes { Bytes }import std.iolet bytes = Bytes.empty()let size: int = bytes.lengthio.writeLine("{size}")
0
Ожидаемый результат
Ожидаемый результат
Выполнение завершается. Код завершения 0.
0
Read a byte buffer size
Ссылкаimport std.bytes { ByteBuffer }import std.iolet buffer = ByteBuffer.allocate(3)let size: int = buffer.lengthio.writeLine("{size}")
3
Ожидаемый результат
Ожидаемый результат
Выполнение завершается. Код завершения 0.
3
Read JSON sizes and preserve optional results
Ссылкаimport std.jsonimport std.testimport std.iolet array = test.assertOk(json.parse("[1,2]"))let object = test.assertOk(json.parse("\{\"name\":\"Topaz\"\}"))let scalar = test.assertOk(json.parse("42"))let arraySize: Option<int> = array.lengthlet objectSize: Option<int> = object.lengthlet scalarSize: Option<int> = scalar.lengthtest.assertEq(test.assertSome(arraySize), 2)test.assertEq(test.assertSome(objectSize), 1)test.assertNone(scalarSize)io.writeLine("JSON sizes read")
JSON sizes read
Ожидаемый результат
Ожидаемый результат
Выполнение завершается. Код завершения 0.
JSON sizes read
Read JSON object keys
Ссылкаimport std.jsonimport std.testimport std.iolet object = test.assertOk(json.parse("\{\"name\":\"Topaz\"\}"))let array = test.assertOk(json.parse("[]"))let scalar = test.assertOk(json.parse("42"))let names: Option<Array<string>> = object.keystest.assertEq(test.assertSome(names)[0], "name")test.assertNone(array.keys)test.assertNone(scalar.keys)io.writeLine("JSON keys read")
JSON keys read
Ожидаемый результат
Ожидаемый результат
Выполнение завершается. Код завершения 0.
JSON keys read
Read JSON object values
Ссылкаimport std.jsonimport std.testimport std.iolet object = test.assertOk(json.parse("\{\"name\":\"Topaz\"\}"))let array = test.assertOk(json.parse("[]"))let scalar = test.assertOk(json.parse("42"))let values = test.assertSome(object.values)test.assertEq(test.assertSome(values[0].asString()), "Topaz")test.assertNone(array.values)test.assertNone(scalar.values)io.writeLine("JSON values read")
JSON values read
Ожидаемый результат
Ожидаемый результат
Выполнение завершается. Код завершения 0.
JSON values read
Reject calling Bytes.length
Ссылкаimport std.bytes { Bytes }function inspect(value: Bytes) -> () {let result = value.length()return ()}
Нет стандартного вывода.Ожидаемый результат
Ожидаемый результат
Этап отклонения check. Ненулевой код завершения.
stdlib-property-not-callable at
main.tpz:3:22
Reject calling ByteBuffer.length
Ссылкаimport std.bytes { ByteBuffer }function inspect(value: ByteBuffer) -> () {let result = value.length()return ()}
Нет стандартного вывода.Ожидаемый результат
Ожидаемый результат
Этап отклонения check. Ненулевой код завершения.
stdlib-property-not-callable at
main.tpz:3:22
Reject calling JSONValue.length
Ссылкаimport std.json { JSONValue }function inspect(value: JSONValue) -> () {let result = value.length()return ()}
Нет стандартного вывода.Ожидаемый результат
Ожидаемый результат
Этап отклонения check. Ненулевой код завершения.
stdlib-property-not-callable at
main.tpz:3:22
Reject calling JSONValue.keys
Ссылкаimport std.json { JSONValue }function inspect(value: JSONValue) -> () {let result = value.keys()return ()}
Нет стандартного вывода.Ожидаемый результат
Ожидаемый результат
Этап отклонения check. Ненулевой код завершения.
stdlib-property-not-callable at
main.tpz:3:22
Reject calling JSONValue.values
Ссылкаimport std.json { JSONValue }function inspect(value: JSONValue) -> () {let result = value.values()return ()}
Нет стандартного вывода.Ожидаемый результат
Ожидаемый результат
Этап отклонения check. Ненулевой код завершения.
stdlib-property-not-callable at
main.tpz:3:22
Diagnostics
СсылкаAllocate buffers and convert byte values
СсылкаAllocate buffers and convert byte values
ByteBuffer.allocate accepts a nonnegative int length and an int initial value from 0 through 255. The initial value defaults to zero.
The new buffer has exactly that many copies of the initial byte. Zero length is valid and still requires a valid initial byte.
A negative length produces TPZ4001 at runtime. An invalid initial byte or an allocation that cannot be satisfied produces TPZ5001 at runtime.
ByteBuffer.fromBytes converts an immutable Bytes value into a mutable ByteBuffer value containing the same bytes.
ByteBuffer.toBytes converts the current buffer contents into an immutable Bytes value.
ByteBuffer.length is a read-only byte count property. Buffer operations never change its length.
Assignment, argument passing, return, capture, and aggregate storage follow collection value semantics.
Supplied expressions evaluate once from left to right before allocation or conversion. These operations have no I/O effects.
Причина
A fixed length gives binary algorithms stable byte positions. Explicit conversion distinguishes mutable construction from immutable byte data.
Allocate zero-filled and initialized buffers
Ссылкаimport std.bytes { ByteBuffer }import std.ioio.writeLine(ByteBuffer.allocate(0).toBytes().toHex())io.writeLine(ByteBuffer.allocate(3).toBytes().toHex())io.writeLine(ByteBuffer.allocate(2, 255).toBytes().toHex())
000000
ffff
Ожидаемый результат
Ожидаемый результат
Выполнение завершается. Код завершения 0.
000000ffff
Keep the original buffer and converted bytes unchanged
Ссылкаimport std.bytes { ByteBuffer }import std.iolet source = "ab".encodeUtf8()let buffer = ByteBuffer.fromBytes(source)let independent = ByteBuffer.fromBytes(source)let before = buffer.toBytes()let mut alias = bufferalias.set(0, 99)io.writeLine(source.toHex())io.writeLine(before.toHex())io.writeLine(independent.toBytes().toHex())io.writeLine(buffer.toBytes().toHex())
6162
6162
6162
6162
Ожидаемый результат
Ожидаемый результат
Выполнение завершается. Код завершения 0.
6162616261626162
Reject a negative buffer length
Ссылкаimport std.bytes { ByteBuffer }ByteBuffer.allocate(-1)
Нет стандартного вывода.Ожидаемый результат
Ожидаемый результат
Этап отклонения run. Ненулевой код завершения.
byte-buffer-negative-bound at
main.tpz:2:1
Validate the initial byte of an empty buffer
Ссылкаimport std.bytes { ByteBuffer }import std.ioByteBuffer.allocate(0, -1)io.writeLine("after")
Нет стандартного вывода.Ожидаемый результат
Ожидаемый результат
Этап отклонения run. Ненулевой код завершения.
byte-buffer-byte-value at
main.tpz:3:1
Validate the initial byte of an empty buffer
Ссылкаimport std.bytes { ByteBuffer }import std.ioByteBuffer.allocate(0, 256)io.writeLine("after")
Нет стандартного вывода.Ожидаемый результат
Ожидаемый результат
Этап отклонения run. Ненулевой код завершения.
byte-buffer-byte-value at
main.tpz:3:1