str
представляет собой неизменяемую последовательность байтов UTF-8 динамической длины где-то в памяти. Поскольку размер неизвестен, его можно обрабатывать только за указателем. Это означает, что str
чаще всего используется как &str
— ссылка на некоторые данные UTF-8, обычно называемые «срезом строки» или просто «срезом». Срез — это просто представление данных, и эти данные могут быть где угодно, например:&'static str.
Данные жестко закодированы в исполняемый файл и загружаются в память при запуске программы.use std::str;
let x: &[u8] = &[b'a', b'b', b'c'];
let stack_str: &str = str::from_utf8(x).unwrap();
String
, если вам требуется владение строковыми данными (например, передача строк в другие потоки или их создание во время выполнения), и используйте &str
, если вам нужно только представление строки. const cancelable = fn => { // Создаётся функция cancelable, которая принимает функцию и сохраняет в переменную fn
const wrapper = (...args) =>{ // Создаётся функция-обёртка, которая принимает любой набор аргументов
if(fn) return fn(...args) // Если в cancelable была передана функция, то вызывает её с необходимыми аргументами
}
wrapper.cancel = () => fn = null // Добавляет свойство во wrapper для очистки переменной fn
return wrapper // Возвращает обёртку
}
const fn = par =>{ // Функция, которая оборачивается в декоратор со своим аргументом
console.log('Function called, par:',par)
}
const f = cancelable(fn) // Создаёт обёртку вокруг fn
f('first') // Function called, par: first
f.cancel() // fn является переменной внутри cancelable, здесь мы её обнуляем
f('second') // Ничего не выводит, потому что условие у wrapper отрабатывает, только если функция есть
от выбора библиотек
что значит код
ubfx r0, r0, #1, #1
-- извлечь битовое поле шириной 1 бит (правая единица) начиная с бита №1 (левая единица) из регистра r0 (правый r0) и поместить результат в r0 (левый r0).bx lr
-- перейти по адресу в регистре lr, обычно это возврат из подпрограммы.какая между ними разница
ubfx r0, r0, #1, #1
ubfx r0, r0, #2, #1
что я делаю не так
switch (expression) { // expression - это какое-то выражение. Тоесть значение одно.
case variant1: // variant1 и variant2 - это тоже какое-то выражение. Тоесть тоже ровно одно значение.
// ...
break;
case variant2:
// ...
break;
default:
// ...
break;
}
// Вот в такое
const value = expression;
if(value === variant1) {
//...
} else if (value === variant2) {
//...
} else {
// ...
}
let etalonCity1 = ['Самара', 'Архангельск'];
switch (arg) {
case etalonCity1[1]: // if (arg === etalonCity1[0])
//to-do
break;
case etalonCity1[0]: // if (arg === etalonCity1[1])
//to-do
break;
default:
//to-do
console.log('Условия сравнения не совпали');
break;
}
a === b ? console.log('true') : console.log('false');
Как происходит доступ к эл. массива на уровне ядра?
Например массив Int* arr = new int[1024*1024*1024] он как храниться?
А физическая, для массива то же? Ведь, так будет доступ намного быстрее?
получается эмулятор каждый адрес вычислять что ли?
с какой-либо из «сторон дела»: пользователя, верстки, программирования, поисковых систем?
Promise.resolve(value)
- это статический метод, возвращающий промис в состоянии fulfilled с указанным значением.new Promise((resolve) => resolve(value))
И можно как-то выполнить промис без аргументов?Что значит "выполнить"? Создать можно, сменить статус с pending на fulfilled нельзя, на rejected можно по исключению.
new Promise((แก้ไข) => แก้ไข('Решено'));
//Promise { <state>: "fulfilled", <value>: "Решено" }