Маjко
С распределением ответственности это вообще страшная тема.
Уныло жить, осознавая, что тебе нихуя никто не поможет в случае чего
Anonymous
просто чтобы объяснить суть.
Если на улице будет идти 2 человека и одному станет плохо, то вероятность что второй ему окажет помощь существенно выше, чем если по улице будет идти 15 человек.
С донатами примерно также
Anonymous
Маjко
Я знаю, да
Anonymous
ну мало ли
Anonymous
у меня вопрос
Anonymous
по расту
Маjко
Давай
Anonymous
я так понимаю фигурные скобки здесь не совсем то что я привык понимать под ними в Си
Маjко
Блоки кода являются выражениями и могут возвращать значения
Маjко
Это такой же вложенный скоп
Маjко
Но на стероидах)
Anonymous
айм ю, бат стронгер?
Маjко
ну
Маjко
Матчи и ифы тоже так умеют кстати
Маjко
По этому нет тернарки
Маjко
a = predicate ? 1 : 0
a = if predicate { 1 } else { 0 }
Anonymous
в расте любое выражение имеет свой тип
Anonymous
абсолютно любое
Anonymous
если ставить после выражения точку с запятой, то его тип будет заменен на ()
Anonymous
и последнее выражение функции или блока возвращается автоматически
andrei
Маjко
эт как
let a = { 0; }
// typeof(a) == ()
Anonymous
эт как
{ 1 } возвращает {integer}
но { 1; } возвращает ()
Маjко
() — "пустой" юнит тип
andrei
А
Anonymous
Anonymous
ага
Anonymous
Маjко
Anonymous
что
Маjко
Пример показывающий что у самого выражения есть свой тип
Маjко
Или не пример
Маjко
Что-нибудь
Anonymous
у какого выражения
Маjко
> у любого
Anonymous
ну
andrei
лол
Маjко
Просто тип выражения — масло маслянное. Выражение может принимать объекты каких-то типов, может возвращать объекты каких-то типов
Маjко
Но про тип выражения слышу первый раз
Anonymous
что
Маjко
Есть тип токена "выражение"
Маjко
Но он общий для всех выражений
Sherzod
Ура!
Sherzod
https://github.com/Microsoft/vscode/issues/20505#issuecomment-314822771
Sherzod
Маjко
Ура)
Anonymous
Маjко
Вот я и подвергаю сомнению тот факт что у любого куска кода есть тип
Маjко
Выражения не входят в систему типов раста
Anonymous
|a: i32| { a + 1 } выражение с типом fn(i32) -> i32
պլհկ
кроме выражений есть еще и стейтменты, так что не любой
Anonymous
vec![()] выражение с типом Vec<()>
Маjко
Нет, чувак, это синтаксис описания лямбды с типом.
Точнее выражения, которое возвращает лямбду с типом
Anonymous
Маjко
Как и следующий пример
Маjко
պլհկ
Oleg
есть ещё атрибуты, импорты, комментарии
Маjко
պլհկ
https://doc.rust-lang.org/reference/statements.html
Oleg
Но, думаю, у любого выражения есть тип
Anonymous
сложно быть дауном. Пойду курить книжку дальше
Маjко
Я доебался к терминологии, конечно же. Но фраза о том что любое выражение имеет свой тип может ввести в заблуждение
Oleg
Маjко
Почему доебался?
Anonymous
"доебался"
Oleg
Какого рода заблуждение
Anonymous
https://rustbyexample.com/expression.html
Oleg
Не у всех выражений их тип можно получить без контекста
Маjко
Потому что фраза двусмысленна и подразумевает под собой, что мы можем оперировать выражениями как объектами в системе типов, что явно не правда, поскольку
let a = 0
Где 0 — выражение, это никак не Expression() -> i32 в системе типов раста
Oleg
Но выражение, у которого нельзя определить тип - это синтаксическая ошибка
Маjко
И оперировать мы выражениями как другими сущностями системы типов не можем
պլհկ
Anonymous
պլհկ
3 | let f: fn(i32) -> i32 = |a: i32| { a + 1 };
| ^^^^^^^^^^^^^^^^^^ expected fn pointer, found closure
|
= note: expected type `fn(i32) -> i32`
found type `[closure@src/main.rs:3:29: 3:47]`