Маjко
С распределением ответственности это вообще страшная тема. Уныло жить, осознавая, что тебе нихуя никто не поможет в случае чего
Anonymous
просто чтобы объяснить суть. Если на улице будет идти 2 человека и одному станет плохо, то вероятность что второй ему окажет помощь существенно выше, чем если по улице будет идти 15 человек. С донатами примерно также
Ма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
и последнее выражение функции или блока возвращается автоматически
Маjко
эт как
let a = { 0; } // typeof(a) == ()
Anonymous
эт как
{ 1 } возвращает {integer} но { 1; } возвращает ()
Маjко
() — "пустой" юнит тип
andrei
А
Anonymous
let a = { 0; } // typeof(a) == ()
ток typeof не существует
Маjко
в расте любое выражение имеет свой тип
Вот тут я не уверен что-то.. Имеет возвращаемый тип, да, но я сомневаюсь про тип выражения, честно говоря
Маjко
ток typeof не существует
Обрати внимание на то, что это комментарий
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ко
Нет, чувак, это синтаксис описания лямбды с типом. Точнее выражения, которое возвращает лямбду с типом
Маjко
Как и следующий пример
Oleg
есть ещё атрибуты, импорты, комментарии
պլհկ
https://doc.rust-lang.org/reference/statements.html
Oleg
Но, думаю, у любого выражения есть тип
Anonymous
сложно быть дауном. Пойду курить книжку дальше
Маjко
Я доебался к терминологии, конечно же. Но фраза о том что любое выражение имеет свой тип может ввести в заблуждение
Маjко
Почему доебался?
Anonymous
"доебался"
Oleg
Какого рода заблуждение
Anonymous
https://rustbyexample.com/expression.html
Oleg
Не у всех выражений их тип можно получить без контекста
Маjко
Потому что фраза двусмысленна и подразумевает под собой, что мы можем оперировать выражениями как объектами в системе типов, что явно не правда, поскольку let a = 0 Где 0 — выражение, это никак не Expression() -> i32 в системе типов раста
Oleg
Но выражение, у которого нельзя определить тип - это синтаксическая ошибка
Маjко
И оперировать мы выражениями как другими сущностями системы типов не можем
պլհկ
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]`
Маjко
ты путаешь выражения и блоки что ли
Поясни? Блоки в расте — это выражения, если они находятся в rvalue
Oleg
ты путаешь выражения и блоки что ли
Нет, он прав, что не для любого выражения можно однозначно определить тип