Mike
найтли собирает?
Anton
Кто-то вообще юзал Failure?
big
Anton
всё есть:
#[macro_use]
extern crate failure;
#[macro_use]
extern crate failure_derive;
big
хм
Loo
Loo
жиза
Anton
Хм, некий другой код завелся.. странно, разбираюсь
Anton
Anton
Всё хорошо, #[derive(Fail, Debug)] пропустил =)
Anton
спасибо за попытку помочь =)
Anton
поздно =)))
Anton
Anton
#macru use то есть =))
Anton
А говорил есть
Sergey
Anonymous
типа типы есть, но доказать что эти типы в рантайме - хуй докажешь
Если тебе что-то приходит, и ты хочешь это проверить, это называется валидация. В случае с TS или Flow, самый надёжный вариант — валидация с выводом типов. Но это оффтоп. Просто для понимания того, что есть места, где ты сам обеспечиваешь себе эти гарантии.
Anonymous
Может показаться, что это слишком низкоуровневая возня. Но это тебе даёт возможность не пихать все проверки в рантайм, не жертвуя безопасностью.
Anonymous
Кстати. А как с этим в расте?
Anonymous
Допустим, моё приложение делает http-запрос, и получает нечто. Как мне провалидировать ответ и вывести тип?
Anonymous
что подразумевает твое "провалидировать"
Dan
вывести тип в рантайме? щта
Anonymous
Например, убедиться, что ответ соответствует
{ id: number,
name?: string }
Anonymous
Anonymous
это же просто логика твоего приложения
Sergey
Anonymous
статический анализ компилятора ортогонален ей
Sergey
Loo
ТИПЫ НЕ НУЖНЫ
Dan
doc
Пробуй распарсить, если не смог, то данные ннвалидны
Cuno
doc
Принцип прочтой
Dan
ТИПЫ НЕ НУЖНЫ
кстати а какой нынче "развернутый аргумент" про это? раньше говорили - потому что аннотации лень писать, но теперь везде вывод, че теперь говорят?
Sergey
Makc
分解物質
Loo
分解物質
встренный в генератор документации
分解物質
лолл
分解物質
тоесть поиск они не осилили а веб-сервер встроить смогли
分解物質
тупые хипстеры
Kerrigan
а почему не devdocs?
Tim
Посоны, для знающих людей простейший вопрос. Вот есть кодес, который не компилится:
match my_hashmap.get(&my_key) {
Some(value) => my_hashmap.insert(my_key, value+1),
None => println!("no_value")
}
Ошибка:
^ expected (), found enum std::option::Option
И как я понял - вся проблема в том, что HashMap::insert возвращает Option<T>. В чём заключается ошибка и как сделать чтобы компилилось?)
Anonymous
=> { my_hashmap.insert(my_key, value+1); },
Tim
понял, спасибо)
Anonymous
мб даже скобки не нужны
Loo
Anonymous
проще с get_mut
Tim
спс)
Tim
and_modify - unstable - не компилится; а как это сделать красиво через get_mut ?
if let Some(x) = my_hashmap.get_mut(&key) {
*x = *x+1;
} else {
my_hashmap.insert(key, 1);
}
приводит к:
11 | if let Some(x) = my_hashmap.get_mut(&key) {
| ---------- first mutable borrow occurs here
...
14 | my_hashmap.insert(key, 1);
| ^^^^^^^^^^ second mutable borrow occurs here
15 | }
| - first borrow ends here
Tim
ну, сделал так - хотя бы работает:
{
let value = my_hashmap.entry(key).or_insert(0);
*value += 1;
}
если кто знает на stable адекватные альтернативы - реквестирую)
պլհկ
Это норма
Alexander
а есть какие-то планы по mutable borrow в pattern-guard ? - достало.
Денис
Денис
тоесть. if let Some(mut x) = my_hashmap.get_mut «< и ref забыл... этож всеравно ссылище
Anonymous
нет разницы
Денис
есть разница)) это просто не компится
Tim
ага, компилится и работает
Денис
Anonymous
ничего странного
Anonymous
&mut тип и mut переменная это разные вещи
Денис
аа все отпадает. он изначально делает &mut. поэтому в X изначально &mut x
Денис
pub fn get_mut<Q: ?Sized😠&mut self, k: &Q) -> Option<&mut V>
Денис
https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.get_mut
Денис
хотя раньше этого не делал) или я давно хешами не пользовался...
Marat
Anonymous
о интересно
Денис
Non lexical lifetimes же позволит, не?
лексика... какбы mut даже 1. не может существовать в одно и тоже время более одного мута, значит плагин должен исключать это, а значит изначально анализировать. 2. Про многопоточность тажа история, mut может быть только один и ты его контролируешь.
Антон
И да... Месье читает r/rustjerk?
Marat
Денис
Marat
какой пример?
if let Some(x) = my_hashmap.get_mut(&key) {
*x = *x+1;
} else {
my_hashmap.insert(key, 1);
}
Marat
Вот этот