История изменений
Исправление gaylord, (текущая версия) :
что значит - ничего не возвращает или ВЫХОДИТ с ошибкой?
Это значит нет никакого результата, котороый можно было бы использовать в бизнес-логике приложения.
Вот тебе пример такой функции:
fn create_file(x: i32) -> Result<(), Error> {
File::create(format!("/tmp/foobar.{}", x))?;
return Ok(());
}
Создали файл и вышли из функции. Все. Ничего полезного эта функция вернуть не может (это описывается типом ()).
то есть возвращает ошибку, например на вершине стека(технический же форум) или на вершине стека не находится ничего?… а это облом. потому что вызывающий не понимает, надо ли со стека снять значение или нет. это если не витать в облаках формальных скобочек. а если он не знает был ли реально возвращен результат - он не может правильно завершить вызов функции.
На стеке очевидно будет та структура, что я привел выше.
то есть, такого рода конструкции некорректны, ибо не могут быть тривиально реализованы, и являются двусмысленными. даже то, что вызов процедуры это statement, а вызов функции - это фактор в expression, то есть они применяются вообще в разных правилах, должен наводить на мысль, что их мешать нельзя.
Это тривиально реализуется.
Исправление gaylord, :
что значит - ничего не возвращает или ВЫХОДИТ с ошибкой?
Это значит нет никакого результата, котороый можно было бы использовать в бизнес-логике приложения.
Вот тебе пример такой функции:
fn create_file(x: i32) -> Result<(), Error> {
File::create(format!("/tmp/foobar.{}", x))?;
}
Создали файл и вышли из функции. Все. Ничего полезного эта функция вернуть не может (это описывается типом ()).
то есть возвращает ошибку, например на вершине стека(технический же форум) или на вершине стека не находится ничего?… а это облом. потому что вызывающий не понимает, надо ли со стека снять значение или нет. это если не витать в облаках формальных скобочек. а если он не знает был ли реально возвращен результат - он не может правильно завершить вызов функции.
На стеке очевидно будет та структура, что я привел выше.
то есть, такого рода конструкции некорректны, ибо не могут быть тривиально реализованы, и являются двусмысленными. даже то, что вызов процедуры это statement, а вызов функции - это фактор в expression, то есть они применяются вообще в разных правилах, должен наводить на мысль, что их мешать нельзя.
Это тривиально реализуется.
Исходная версия gaylord, :
что значит - ничего не возвращает или ВЫХОДИТ с ошибкой?
Это значит нет никакого результата, котороый можно было бы использовать в бизнес-логике приложения.
Вот тебе пример такой функции:
fn create_file(x: i32) -> Result<(), Error> {
File::create(format!("/tmp/foobar.{}", x))?;
}
Создали файл и вышли из функции. Все. Ничего полезного эта функция вернуть не может (это описывается типом ()).
то есть возвращает ошибку, например на вершине стека(технический же форум) или на вершине стека не находится ничего?… а это облом. потому что вызывающий не понимает, надо ли со стека снять значение или нет. это если не витать в облаках формальных скобочек. а если он не знает был ли реально возвращен результат - он не может правильно завершить вызов функции.
На стеке очевидно будет та структура, что я привел выше.
то есть, такого рода конструкции некорректны, ибо не могут быть тривиально реализованы, и являются двусмысленными. даже то, что вызов процедуры это statement, а вызов функции - это фактор в expression, то есть они применяются вообще в разных правилах, должен наводить на мысль, что их мешать нельзя.
Это тривиальное реализуется.